2011-08-25 15 views
11

Nella mia app rails 3.1rc6, che utilizza sottodomini, dispongo di un ambiente di produzione e di produzione. Ho acquistato e configurato nomi di domini diversi per questi ambienti, perché il valore predefinito qualcosa-something.herokuapp.com non funziona bene con i sottodomini.Configurare session_store.rb per gestire la gestione temporanea e la produzione?

Quando ho creato session_store.rb a questo per un unico ambiente, tutto funziona bene:

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

Ma io non riesco a aggiungere in un condizionale per consentire i nomi di dominio specifico per l'ambiente.

Ho provato

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? 

che non funziona.

risposta

6

È possibile utilizzare la Opzione :domain => :all. È inoltre possibile fornire una :tld_length, se diverso da 1.

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

Ecco il codice Rails rilevanti

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 

In caso contrario, si dovrebbe anche essere in grado di sostituire le impostazioni nel file su un per- base ambientale.

+0

Cracking, grazie mille. – snowangel

+2

Pensavo di aggiungere qui come questa risposta mi ha aiutato. Se stai sviluppando con il dominio helper lvh.me per i tuoi sottodomini, viene interpretato tramite DOMAIN_REGEXP come TLD e quindi non imiterà example.com, invece si comporta come example.com.au quindi devi passare tld_length di 1 [fonte Github] (https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/cookies.rb#L103) – toxaq

16

le seguenti impostazioni ha lavorato bene per me:

config/ambienti/staging.rb

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

config/ambienti/production.rb

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

Questa opzione ha funzionato anche per me - grazie. – snowangel

+0

Si prega di contrassegnare la risposta come accettata :-) –

+0

Mi dispiace - posso solo scegliere uno! Ho svalutato l'utente a titolo di compensazione ... – snowangel

Problemi correlati