2014-05-23 44 views
16

Konfiguracja

Nasza aktualna aplikacja Rails jest wykonana z pod-aplikacji, które są montowane jako silniki. Zazwyczaj te silniki są montowane na subdomenie w głównym routes.rb pliku następującoTrasy w silniku zamontowanym na poddomenie nie dziedziczą ograniczeń.

mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'} 

problem

trasach w MySubApp „s routes.rb pliku nie uzyskać subdomeny przy użyciu nazwanych _url pomocników. Na przykład następujące w apps/my_sub_app/config/routes.rb

MySubApp::Engine.routes.draw do 
    resources :foos 
end 

daje nam sub_app.foo_url(5) ale skutkuje

http: // www .example.com /foos/5

gdy chcemy

http: // sub_app .example.com/foos/5

tl; dr

Jak mogę uzyskać ograniczenia montażowe silnika przekazywany do swoich nazwanych tras?

EDIT: obejście

Chociaż ja wciąż wolą lepsze rozwiązanie dodaje zadziała. Można owinąć wszystkie szlaki w każdej z aplikacji sub routes.rb plików, które mogą być montowane na subdomenie jak tak

MySubApp::Engine.routes.draw do 
    constraints Rails.application.routes.named_routes[:sub_app].constraints do 
    resources :foos 
    end 
end 

EDIT 2: (? od skasowany) Znacznie mniej pożądane obejście

commenter wskazał możesz przekazać pomocnikom opcję subdomain, ale chcielibyśmy uniknąć konieczności używania sub_app.foo_url(5, {subdomain: 'sub_app'}) dla każdego linku poddomeny krzyżowej. Nawet jeśli przenieśliśmy nazwę subdomeny do ENV var i zrobiliśmy opakowanie, nie jest to SUCHA.

+0

Szukasz multi-najemcy? Jeśli tak, istnieje Railscast do tego, ale jest pro. http: // railscasts.com/episodes/388-multitenancy-with-scopes? view = asciicast. Osobiście nigdy z nimi nie współpracowałem, więc nie mogę ci pomóc. Właśnie zobaczyłem ten odcinek jakiś czas temu i przekazuję go dalej, jeśli w rzeczywistości jest to, czego szukasz. – MCB

+0

Dzięki @MCB. Sprawdzę to wideo, kiedy będę mógł i zaktualizuję to, jeśli zapewni dobre wyniki. – Aaron

+0

Właśnie widziałem Railscast i nie jest to, czego szukamy: /. W rzeczywistości mamy wiele aplikacji działających jako silniki w jednej aplikacji Railsowej. Każdy z silników jest montowany z ograniczeniem subdomeny, ale to samo ograniczenie nie jest przenoszone na poszczególne pliki tras silników. – Aaron

Odpowiedz

0

Sprawdź guide mówi można to zrobić przez

namespace :Engine do 
    resources :controller, :methods 
end 

silnik jest po prostu wymienić rozstaw kodzie

+0

Dzięki @bobbdelsol, ale pozwoli to tylko na umieszczanie nazw na najwyższym poziomie. W ogóle nie wpłynie to na subdomeny. – Aaron

1

@Aaron nie wiem, czy kiedykolwiek dostał to naprawić, ale patrzeć w

Ustawienie
config.action_dispatch.tld_length 

(w konfiguracji silnika). Nie jestem pewien, jak zareaguje na silniki, ale w naszym przypadku pozwala nam to obsłużyć przypadek sub-subdomen dla naszego serwera pomostowego (więc kiedy używamy pomocników _url z serwerem pomostowym, to poprawnie wykonuje on subdomain.staging.domain.com, zamiast subdomain.domain.com).