2013-03-18 8 views
60

Mam pewien kod, który musi działać tylko wtedy, gdy aplikacja rails znajduje się w środowisku programistycznym (np. Serwer rails), ale nie w środowisku testowym (np. Test rake'u). .Jak określić, czy moje szyny znajdują się w środowisku programowania, a nie w środowisku testowym?

Kiedy próbuję

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

kod pobiera wykonywane niezależnie od tego, w jakim środowisku jestem ja nawet próbowałem:

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

ale nie miłość.

Co powinienem zamiast tego robić?

Peter.

+0

Ten kod powinien zadziałać. Czy próbowałeś wyprowadzić 'Rails.env' wewnątrz tego bloku, aby zobaczyć, jakiego środowiska Railsy używa? – PinnyM

+1

Myślę, że może to być "i nie" bity .. to nie to samo co &&! Zgaduję. Czy znalazłeś rozwiązanie? – baash05

+0

Nigdy nie znalazłem rozwiązania. Z jakiegokolwiek powodu, szyny uruchamiają swoje inicjalizatory dwa razy (patrz komentarz poniżej). Odkąd porzuciłem szyny. – spierepf

Odpowiedz

114

Wygląda na to, że dzwonisz poprawnie. Być może problemem jest to, że środowisko nazywa się gdzieś inaczej. Wypróbuj konsolę:

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

... aby potwierdzić, że otoczenie jest takie, jakie Twoim zdaniem jest.

+1

Ok, stworzyłem inicjalizator, który jedynie "umieszcza Rails.env". W rezultacie serwer $ rails daje "rozwój", podczas gdy $ rake test daje zarówno "rozwój", jak i "test". Sugeruje to mi, że tory dwukrotnie uruchamiają mój inicjator podczas testu rake'u $. – spierepf

+1

Możesz także otworzyć konsolę w określonym środowisku, np. 'RAILS_ENV = test konsoli szyn". – Mori

+1

Nie martw się, jeśli nie masz zainstalowanej aplikacji w aplikacji. działa również na prostej konsoli – ImranNaqvi

Powiązane problemy