Як я можу визначити, чи мої рейки знаходяться в середовищі розробки, а не в тестовому середовищі?


78

У мене є деякий код, який потрібно запускати, лише якщо додаток rails знаходиться у середовищі розробки (тобто $ rails server), але не в тестовому середовищі (тобто $ rake test).

Коли я намагаюся

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

код виконується незалежно від того, в якому середовищі я перебуваю. Я навіть намагався:

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

але ніякої любові.

Що я повинен робити замість цього?


Цей код повинен працювати. Ви пробували виводити Rails.envвсередині цього блоку, щоб побачити, яке середовище Rails думає, що воно використовує?
PinnyM

1
Я думаю, це можуть бути біти "а не" .. це не те саме, що &&! Тобто я здогадуюсь .. ти знайшов рішення?
baash05

Я так і не знайшов рішення. З будь-якої причини, rails запускає свої ініціалізатори двічі (див. Коментар нижче). З тих пір я покинув рейки.
spierepf

Відповіді:


146

Схоже, ви називаєте це правильно. Можливо, проблема в тому, що середовище десь по-іншому названо. Спробуйте в консолі:

> Rails.env
=> "development"
> Rails.env.development?
=> true
> Rails.env.test?
=> false

... щоб підтвердити, що довкілля - це те, що ти думаєш.


1
Гаразд, я створив ініціалізатор, який просто 'ставить Rails.env'. Результатом є те, що сервер $ rails дає «розробку», тоді як тест $ rake дає і «розробку», і «тест». Це говорить мені про те, що rails запускає мій ініціалізатор двічі під час $ rake-тесту.
spierepf

2
Ви також можете відкрити консоль у певному середовищі, наприклад RAILS_ENV=test rails console.
Морі

1
не хвилюйтеся, якщо ви не встановили прай у своєму додатку. це працює і в простій консолі
ImranNaqvi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.