82
votes

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?

1
This code should work. Have you tried outputting Rails.env inside that block to see what environment Rails thinks it's using?PinnyM
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
I never found a solution. For whatever reason, rails runs its initializers twice (see comment below). I've since abandoned rails.spierepf

1 Answers

150
votes

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.