2011-08-25 11 views
11

Posiadam środowisko postoju i produkcji na mojej aplikacji szynowej 3.1rc6, która korzysta z subdomen. Kupiłem i skonfigurowałem różne nazwy domen dla tych środowisk, ponieważ domyślnie coś-something.herokuapp.com nie ładnie gra z subdomenami.Skonfigurować session_store.rb do obsługi przemieszczania i produkcji?

Kiedy ustawić session_store.rb do tego dla jednego środowiska, wszystko działa prawidłowo:

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk' 

Ale nie wydaje się dodawać w sposób warunkowy, aby umożliwić nazw domen specyficzne dla środowiska.

Próbowałem

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk' if Rails.env.staging? 
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com' if Rails.env.production? 

który nie działa.

Odpowiedz

6

można użyć :domain => :all Opcja. Można również zapewnić :tld_length, jeżeli jest inny niż 1.

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => :all 

Oto kod odpowiednie Szyny

def handle_options(options) #:nodoc: 
    options[:path] ||= "/" 

    if options[:domain] == :all 
    # if there is a provided tld length then we use it otherwise default domain regexp 
    domain_regexp = options[:tld_length] ? /([^.]+\.?){#{options[:tld_length]}}$/ : DOMAIN_REGEXP 

    # if host is not ip and matches domain regexp 
    # (ip confirms to domain regexp so we explicitly check for ip) 
    options[:domain] = if (@host !~ /^[\d.]+$/) && (@host =~ domain_regexp) 
     ".#{$&}" 
    end 
    elsif options[:domain].is_a? Array 
    # if host matches one of the supplied domains without a dot in front of it 
    options[:domain] = options[:domain].find {|domain| @host.include? domain[/^\.?(.*)$/, 1] } 
    end 
end 

W przeciwnym razie, należy również być w stanie zastąpić ustawienia w pliku na per- podstawa środowiska.

+0

Pękanie, dziękuję bardzo. – snowangel

+2

Myślałem, że dodam tutaj, ponieważ ta odpowiedź pomogła mi. Jeśli tworzysz z domeną pomocniczą lvh.me dla twoich poddomen, to jest interpretowane przez DOMAIN_REGEXP jako TLD, więc nie będzie naśladować example.com, zamiast tego zachowuje się jak example.com.au, więc musisz przejść tld_length of 1 [Źródło Github] (https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/cookies.rb#L103) – toxaq

16

The następujących ustawieniach działa dobrze dla mnie:

config/środowiska/staging.rb

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk' 

config/środowiska/production.rb

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com' 
+0

Ta opcja działała również dla mnie - dziękuję. – snowangel

+0

Proszę oznaczyć odpowiedź jako zaakceptowaną :-) –

+0

Niestety - mogę wybrać tylko jeden! Wycofałem cię z rekompensaty ... – snowangel

Powiązane problemy