2015-06-09 9 views
6

Ich habe eine Rails 4-App für mehrere Mandanten, die Subdomains mit PostgreSQL-Schemas verwendet, um die Anwendung zu "mandrieren". Ich habe die Subdomain-Wildcards "*" in Heroku und Cloudflare eingerichtet und die Seite lädt, aber es "denkt" weiter, dass das www eine gültige Subdomain ist. Aus diesem Grund funktionieren normalerweise gültige Links (die in der Entwicklung arbeiten) nicht in der Produktion, da www.mysite.com/accounts/new usw. dasselbe ist wie asdf.mysite.com/accounts/new. Gibt es eine Möglichkeit, dass meine App www als Subdomain so gut wie ignoriert? Ich möchte immer noch, dass mysite.com auf www.mysite.com umleitet, aber setze die Subdomain einfach auf false, wenn es www ist?Rails + Heroku + Cloudflare - Erledige www als Subdomain

Um die Dinge ein wenig konkreter zu machen, habe ich in meinem application_controller einen Code, der Folgendes macht. Beachten Sie die Kommentare. Im Entwicklungsmodus funktioniert redirect_to root_url (subdomain: false), aber in der Produktion wird es nur unendlich umgeleitet und nicht geladen. Um es zu laden, rendere ich einfach die Seite, aber das setzt die Subdomain niemals auf 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 

Grundsätzlich funktioniert alles wie im Entwicklungsmodus erwartet, aber in der Produktion, es wird einige DNS-Probleme sein, die ausgebügelt muß, aber ich kann nicht scheinen, um herauszufinden, was zu tun ist. Irgendwelche Gedanken?

Antwort

1

Ich musste den A-Namen-Datensatz in CloudFlare entfernen und durch einen CNAME-Datensatz ersetzen. Ich fügte auch 2 zusätzliche CNAME-Datensätze hinzu: einen Platzhalter und einen für www.

0

Mein Vorschlag ist es, www.mysite.com auf mysite.com umzuleiten, wo Sie wahrscheinlich die Hauptseite haben.

Sie können dies erreichen, indem Sie den Hostnamen auf einen Weiterleitungsdienst verweisen oder eine bestimmte Route mit Einschränkung in der Datei routes.rb verwenden.

+0

Ich habe derzeit drei DNS-Einträge auf CloudFlare einrichten: A - mydomain.com - verweist auf [IP-Adresse] CNAME - www - alias von myapp.herokuapp.com CNAME - * - alias von myapp.herokuapp. com Ich habe versucht, das www zu entfernen, und das tut die gleiche Sache (ich denke, dass es von der Wildcard abgeholt wird?) irgendeine Idee auf die Einstellung? Ist das richtig? Oder ein Beispiel routes.rb mit Einschränkung wäre toll. Vielen Dank für Ihre Antwort! – Trinculo