92

我曾经script/server -e production在生产模式下启动 Rails。确实如此,我没有任何错误。但是,我如何判断它是否处于生产模式?我尝试了一条不存在的路线,但我得到了一个与我在开发中类似的错误页面。

我想如果在生产模式下,我会得到 /public 文件夹中的 404 错误页面。

这是否意味着它没有在生产模式下启动?

谢谢你的帮助。

4

6 回答 6

248

如果它的 Rails 3.1+,Rails.env.production?true在生产时返回。

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
于 2011-08-22T07:10:36.343 回答
36

对于现代 Rails 版本(3+),Rails.env将环境返回为String

Rails.env #=> "production"

对于每个将返回 a 的环境,还有一些有用的访问器* Boolean

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false

(*) 这里有个问题:这些不是真正的访问器。它们只是一串字母,如果它们碰巧与当前环境名称匹配,它们会返回 true。他们默默地失败。这意味着您可以投入生产,但如果此代码中有拼写错误,您将不会收到错误,您只会得到false

Rails.env.producton?  #=> false

出于这个原因,我在初始化程序中设置了常量,并且只引用了我其余代码中的常量。这让 Ruby 解释器可以帮助我发现自己的错误:

PRODUCTION = Rails.env.production?
DEVELOPMENT = Rails.env.development?
TEST = Rails.env.test?
于 2013-08-31T03:54:06.133 回答
34

2个简单的方法:

tail -f log/production.log

如果在您点击应用程序后有条目填充该日志,则您处于生产模式。

第二种方式:

在您的一个视图中(可能布局很好),只需添加

<%= "Environment: #{RAILS_ENV}" %>

这将向您展示您正在运行的环境。

编辑

如果请求被视为“本地”(即来自 localhost 或 127.0.0.1),您将在任何环境中看到默认异常页面而不是实际错误页面,您可以通过将其添加到您的ApplicationController

def local_request?
  false
end

您可以在api的文档中找到此方法

于 2009-12-28T03:09:23.727 回答
8

在您的命令行类型rails console上,然后Rails.env

于 2015-09-06T10:40:22.423 回答
3

我发现重新启动 rails 服务器并阅读命令行上的第二行要容易得多:

运行rails s -e production输出:

=> Booting Puma
=> Rails 4.2.4 application starting in `production` on http://localhost:3000

示例中有 Webrick,但有些人不明白更改服务器如何仅替换名称。为清晰起见进行了更新。

于 2014-09-18T13:43:16.953 回答
-2

命令行替代

$echo $RAILS_ENV

于 2012-01-24T11:23:11.030 回答