【问题标题】:Rails.env vs RAILS_ENVRails.env 与 RAILS_ENV
【发布时间】:2011-02-12 11:44:46
【问题描述】:

在检查正在运行的环境时,我在示例中看到了这两种情况。首选什么?它们在所有意图和目的上是否平等?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    According to the docs, #Rails.env 包裹 RAILS_ENV:

        # File vendor/rails/railties/lib/initializer.rb, line 55
         def env
           @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
         end
    

    但是,具体如何看看它是如何包装的,使用ActiveSupport::StringInquirer

    在这个类中包装一个字符串给出 你是一个更漂亮的测试方式 平等。返回的值 Rails.env 被包裹在一个 StringInquirer 对象所以而不是 调用这个:

    Rails.env == "production"
    

    你可以这样称呼:

    Rails.env.production?
    

    所以它们并不完全等价,但它们相当接近。我还没有过多地使用 Rails,但我想说#Rails.env 肯定是由于使用StringInquirer 而更具视觉吸引力的选择。

    【讨论】:

    • 很好的解释,谢谢!我还试图找到 RAILS_ENV 的定义位置?有什么想法吗??
    • 值得一提的是Rails.env 是新标准,因为RAILS_ENV 正在被弃用。
    • Ryan,在命令行上,你不能使用 Rails.env。所以如果它很快就会被弃用,那么你会在 CLI 上使用什么?
    • 使用 Rails.env.production?保护您免受实际改变环境的拼写错误,如下所示:RA​​ILS_ENV = "production"。注意错过的 = 符号。
    • 所有这些荒谬的复杂性只是为了让您可以使用问号?
    【解决方案2】:

    ENV['RAILS_ENV'] 现在已弃用

    您应该使用Rails.env,这显然更好。

    【讨论】:

      【解决方案3】:

      在 Rails 2.x 之前,获取当前环境的首选方法是使用 RAILS_ENV 常量。同样,您可以使用RAILS_DEFAULT_LOGGER 获取当前记录器或使用RAILS_ROOT 获取根文件夹的路径。

      从 Rails 2.x 开始,Rails 引入了 Rails 模块,并带有一些特殊的方法:

      • Rails.root
      • Rails.env
      • Rails.logger

      这不仅仅是表面上的改变。 Rails 模块提供了使用标准常量无法提供的功能,例如StringInquirer 支持。 也有一些细微的差别。 Rails.root 不返回简单的 String 而是 Path 实例。

      无论如何,首选方法是使用Rails 模块。常量在 Rails 3 中已被弃用,并将在未来的版本中删除,也许是 Rails 3.1。

      【讨论】:

      • 仅供参考,从 here 的讨论来看,听起来这些方法是在 Rails 2.3 中引入的,而不是 2.0。
      • 我们在一个项目中使用 2.1.2。 Rails.env 工作没有问题。
      【解决方案4】:

      调试我的应用时出现的奇怪行为: 需要“active_support/notifications” (rdb:1) p ENV['RAILS_ENV'] “测试” (rdb:1) p Rails.env “发展”

      我会说你应该坚持一个或另一个(最好是 Rails.env)

      【讨论】:

        【解决方案5】:

        更新:在 Rails 3.0.9 中: railties/lib/rails.rb 中定义的 env 方法

        【讨论】:

          猜你喜欢
          • 2014-03-20
          • 1970-01-01
          • 2023-03-22
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多