88

I have some code that needs to run only if the rails app is in the development environment (i.e. $ rails server) but not in the test environment (i.e. $ rake test).

When I try

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

the code gets executed regardless of which environment I am in. I've even tried:

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

but no love.

What should I be doing instead?

Peter DeWeese
  • 18,141
  • 8
  • 79
  • 101
spierepf
  • 2,774
  • 2
  • 30
  • 52
  • This code should work. Have you tried outputting `Rails.env` inside that block to see what environment Rails thinks it's using? – PinnyM Mar 18 '13 at 18:28
  • 1
    I think it could be the "and not" bits.. that is not the same as && ! That is me guessing.. did you find a solution? – baash05 Oct 01 '14 at 05:43
  • I never found a solution. For whatever reason, rails runs its initializers twice (see comment below). I've since abandoned rails. – spierepf Oct 02 '14 at 13:07

1 Answers1

159

It looks like you're calling it correctly. Perhaps the problem is that the environment is named differently somewhere. Try in the console:

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

...to confirm that the environment is what you think it is.

Mori
  • 27,279
  • 10
  • 68
  • 73
  • 1
    Ok, I've created an initializer which merely 'puts Rails.env'. The result is that $ rails server gives 'development', while $ rake test gives both 'development' and 'test'. This suggests to me that rails is runnning my initializer twice during $ rake test. – spierepf Mar 18 '13 at 18:36
  • 2
    You can also open the console in a specific environment, e.g. `RAILS_ENV=test rails console`. – Mori Mar 18 '13 at 19:26
  • 1
    don't worry if you've not installed pry in your app. it works in simple console also – Mani Oct 12 '15 at 06:30