2013-03-18 4 views
60

Ho un codice che deve essere eseguito solo se l'app per le rotaie si trova nell'ambiente di sviluppo (ad es. $ Rails server) ma non nell'ambiente di test (ad es. $ Rake test). .Come posso determinare se le mie guide si trovano nell'ambiente di sviluppo e non nell'ambiente di test?

Quando provo

if Rails.env.development? 
    dont run me during testing 
end 

il codice viene eseguito indipendentemente da quale ambiente sono in Ho anche provato:

if Rails.env.development? and not Rails.env.test? 
    NO, REALLY, DONT RUN ME DURING TESTING 
end 

ma senza amore.

Cosa dovrei fare invece?

Peter.

+0

Questo codice dovrebbe funzionare. Hai provato a pubblicare 'Rails.env' all'interno di quel blocco per vedere quale ambiente Rails pensa stia usando? – PinnyM

+1

Penso che potrebbe essere il "e non" bit .. che non è lo stesso di &&! Quello sono io che indovinare .. hai trovato una soluzione? – baash05

+0

Non ho mai trovato una soluzione. Per qualsiasi ragione, i binari eseguono due volte il suo inizializzatore (vedi commento sotto). Ho abbandonato le rotaie. – spierepf

risposta

114

Sembra che tu stia chiamando correttamente. Forse il problema è che l'ambiente è chiamato diversamente da qualche parte. Prova nella console:

[1] pry(main)> Rails.env 
=> "development" 
[2] pry(main)> Rails.env.development? 
=> true 
[3] pry(main)> Rails.env.test? 
=> false 

... per confermare che l'ambiente è quello che pensi sia.

+1

Ok, ho creato un inizializzatore che semplicemente 'mette Rails.env'. Il risultato è che il server $ rails fornisce 'sviluppo', mentre il test $ rake fornisce sia 'sviluppo' che 'test'. Questo mi suggerisce che le rotaie stanno eseguendo il mio inizializzatore due volte durante il test di $ rake. – spierepf

+1

È anche possibile aprire la console in un ambiente specifico, ad es. 'RAILS_ENV = test rails console'. – Mori

+1

non preoccuparti se non hai installato la leva nella tua app. funziona anche in una semplice console – ImranNaqvi

Problemi correlati