2015-06-09 4 views
6

Possiedo un'app Rails 4 multi-tenant che utilizza sottodomini con schemi PostgreSQL per "affittare" l'applicazione. Ho i sottodomini jolly "*" impostati su Heroku e Cloudflare e il sito viene caricato, ma continua a "pensare" che il www sia un sottodominio valido. Per questo motivo, i collegamenti normalmente validi (che funzionano in fase di sviluppo) non funzionano in produzione perché www.mysite.com/accounts/new ecc. È uguale a asdf.mysite.com/accounts/new. C'è un modo in cui posso far sì che la mia app ignori www come sottodominio? Mi piacerebbe comunque che mysite.com reindirizzasse a www.mysite.com, ma praticamente basta impostare il sottodominio su false quando è www?Rails + Heroku + Cloudflare - Elimina www come sottodominio

Per rendere le cose un po 'più concrete, nel mio application_controller, ho del codice che fa quanto segue. Nota i commenti In modalità di sviluppo, il redirect_to root_url (sottodominio: false) funziona, ma in produzione, semplicemente infinitamente reindirizza e non carica. Per farlo caricare, faccio semplicemente il rendering della pagina, ma così facendo non imposta mai il sottodominio su false.

def load_schema 
    Apartment::Tenant.switch!('public') 
    return unless request.subdomain.present? 
    if current_account 
     Apartment::Tenant.switch!(current_account.subdomain) 
    else 
     redirect_to root_url(subdomain: false) # Works locally, but infinite re-direct in production 
     #render 'welcome/index' # - Renders the page in production, but nothing else works. 
    end 
    end 

In sostanza, tutto funziona come previsto in modalità di sviluppo, ma in produzione, ci sembrano essere alcuni problemi di DNS che hanno bisogno di appianare, ma io non riesco a capire cosa fare. qualche idea?

risposta

1

Ho dovuto rimuovere il record del nome A in CloudFlare e sostituirlo con un record CNAME. Ho anche aggiunto 2 record CNAME aggiuntivi: un carattere jolly e uno per www.

0

Il mio suggerimento è di forzare www.mysite.com a reindirizzare su mysite.com dove probabilmente si trova il sito principale.

È possibile eseguirlo utilizzando il nome host su un servizio di reindirizzamento o utilizzando una route specifica con vincolo nel file routes.rb.

+0

Al momento ho 3 record DNS impostati sul CloudFlare: A - mydomain.com - punta a [Indirizzo IP] CNAME - www - alias di myapp.herokuapp.com CNAME - * - alias myapp.herokuapp. com Ho provato a rimuovere il www e questo fa la stessa cosa (penso che sia preso dal carattere jolly?) qualche idea su come configurarlo? È giusto? Oppure un esempio di route.rb con vincolo sarebbe fantastico. Grazie per la risposta! – Trinculo