How to tell if rails is in production?
I used script/server -e production
to start rails in production mode. It did and I got no errors. However how do I tell if it is in production mode? I tried a non-existent route, and I got a similar error page I did in development.
I thought if under production model, I get the 404 error page that is in my /public folder.
Does it mean it didn't start in production mode?
Thanks for your help.
Solution 1:
If its Rails 3.1+, Rails.env.production?
will return true
when in production.
Rails.env.production? #=> true
Rails.env.staging? #=> false
Rails.env.development? #=> false
Solution 2:
For modern Rails versions (3+), Rails.env
returns the environment as a String
:
Rails.env #=> "production"
There are also helpful accessors* for each environment that will return a Boolean
:
Rails.env.production? #=> true
Rails.env.staging? #=> false
Rails.env.development? #=> false
(*) There's a gotcha here: these aren't real accessors. They're just strings of letters and if they happen to match the current environment name, they return true. They fail silently. That means that you can be in production, but if have a typo in this code, you won't get an error, you'll simply get false
:
Rails.env.producton? #=> false
For that reason, I set constants in an initializer and only refer to those in the rest of my code. This lets the Ruby interpreter help me catch my own errors:
PRODUCTION = Rails.env.production?
DEVELOPMENT = Rails.env.development?
TEST = Rails.env.test?
Solution 3:
2 easy ways:
tail -f log/production.log
if there are entries populating that log after you hit the app, you're in production mode.
second way:
in one of your views (probably the layout is good), just add
<%= "Environment: #{RAILS_ENV}" %>
And that will show you what the environment that you're running in.
edit
You will see the default exception page instead of the actual error pages on any environment if the request is considered "local" (that is from localhost or 127.0.0.1), you can override this by adding this to your ApplicationController
def local_request?
false
end
You can find this method in the docs in the api