Nie udało mi się znaleźć praktycznego rozwiązania tego problemu, pomimo kilku podobnych pytań tutaj i gdzie indziej. Wydaje się prawdopodobne, że na to pytanie nie udzielono odpowiedzi w przypadku Rails 3, więc oto:
Mam aplikację, która obecnie umożliwia użytkownikom tworzenie własnej subdomeny zawierającej ich wystąpienie aplikacji. Podczas gdy w Railsach 2 najlepiej obsługiwano Cię przy użyciu klejnotu subdomain-fu, w wersji 3 jest to znacznie prostsze, jak na Railscast - http://railscasts.com/episodes/221-subdomains-in-rails-3 .
To dobra rzecz, ale chcę również zapewnić użytkownikom opcję kojarzenia własnej nazwy domeny z kontem. Więc chociaż mogą mieć adres http://użytkownik.moja_domena.com , chciałbym, aby również mieli skojarzony adres http://userx.com .
Znalazłem kilka odniesień do robienia tego w Railsach 2, ale te techniki wydają się już nie działać (szczególnie ta: https://feefighters.com/blog/hosting-multiple-domains-from-a-single-rails -app / ).
Czy ktoś może polecić sposób użycia tras w celu zaakceptowania dowolnej domeny i przekazania jej do kontrolera, abym mógł wyświetlić odpowiednią zawartość?
Aktualizacja : otrzymałem większość odpowiedzi teraz, dzięki szybkiej odpowiedzi Leonida i świeżemu spojrzeniu na kod. Ostatecznie wymagało to dodania do istniejącego kodu subdomeny, którego używałem (z rozwiązania Railscast), a następnie dodania trochę do route.rb. Nie jestem jeszcze do końca, ale chcę opublikować to, co mam do tej pory.
W lib / subdomain.rb:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
class Domain
def self.matches?(request)
request.domain.present? && request.domain != "mydomain.com"
end
end
Dodałem drugą klasę naśladując pierwszą, która jest znana z pracy. Po prostu dodaję warunek, który zapewni, że domena przychodząca nie jest tą, dla której hostuję witrynę główną.
Ta klasa jest używana w route.rb:
require 'subdomain'
constraints(Domain) do
match '/' => 'blogs#show'
end
constraints(Subdomain) do
match '/' => 'blogs#show'
end
Tutaj wklejam istniejący kod subdomeny (znowu działa dobrze) z sekcją do sprawdzenia domeny. Jeśli ten serwer odpowiada tej domenie i nie jest to ten, pod którym działa główna lokacja, przekieruj do określonego kontrolera.
I chociaż wydaje się, że to działa, nie mam jeszcze całej sprawy, ale myślę, że ten konkretny problem został rozwiązany.