【问题标题】:How to tell if rails is in production?如何判断 Rails 是否在生产中?
【发布时间】:2010-12-30 09:10:34
【问题描述】:

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails development-environment production-environment


    【解决方案1】:

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

    Rails.env #=> "production"
    

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

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

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

    Rails.env.producton?  #=> false
    

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

    PRODUCTION = Rails.env.production?
    DEVELOPMENT = Rails.env.development?
    TEST = Rails.env.test?
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • >> Rails.env via rails c 似乎适用于任何模式。
      • 带问号的所有内容均可用。 Rails.env 是一个用ActiveSupport::StringInquirer 装饰的字符串。 api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
      • 请注意,这也适用于 rails 控制台。在生产服务器上我能够运行:rails 控制台,然后是上面的命令。
      【解决方案3】:

      我发现重启 Rails 服务器并在命令行中读取第二行要容易得多:

      运行rails s -e production 输出:

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

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

      【讨论】:

      • 没有人在生产中使用WEBrick
      • Hauleth 是绝对正确的。这只是为了测试你在开发时所处的环境。
      • 如果这个答案是拖钓,那就是精通!恭喜!
      【解决方案4】:

      在命令行输入rails console,然后输入Rails.env

      【讨论】:

        【解决方案5】:

        命令行替代

        $echo $RAILS_ENV

        【讨论】:

        • 如果服务器是使用内联 ENV 变量启动的,这将不起作用。也就是说,如果这样做了,那么脚本/别名/等应该存在于磁盘上的某个位置,其中将包括 RAILS_ENV 变量。可以在磁盘上搜索,比如ack
        • 这不起作用....变量中有什么以及它如何获得环境???
        【解决方案6】:

        两种简单的方法:

        tail -f log/production.log
        

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

        第二种方式:

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

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

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

        编辑

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

        def local_request?
          false
        end
        

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

        【讨论】:

        • 我无法获得第二种工作方式,但我的 production.log 中有条目说我在 X 时间创建了一个任务。那么为什么我没有得到正确的 404 错误页面呢?我是否必须指定某个地方以提供正确的错误页面?感谢您的帮助。
        • 我的观点有误,不得不改用@Krishnaprasad 的方法。
        • 请注意 RAILS_ENV 已弃用。请改用Rails.env
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 2017-08-16
        • 2013-05-12
        • 2014-01-31
        • 2011-11-22
        相关资源
        最近更新 更多