当检查env one正在运行时,我在例子中看到了这两种情况。喜欢是什么?它们在所有意图和目的上都是平等的吗?
当前回答
根据文档,#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。环境是包裹在一个 StringInquirer对象,而不是 调用: Rails。Env == "生产" 你可以调用它: Rails.env.production吗?
所以它们并不完全相等,但相当接近。我还没有经常使用Rails,但是我要说#Rails。由于使用StringInquirer, env当然是更有视觉吸引力的选择。
其他回答
更新:在Rails 3.0.9: railties/lib/rails.rb中定义的Env方法
在调试我的应用程序时奇怪的行为: 需要“active_support /通知” (rdb:1) p ENV['RAILS_ENV'] “测试” (rdb:1) p Rails.env “发展”
我会说你应该坚持使用其中一个(最好是Rails.env)
Rails 2之前。因此,获取当前环境的首选方法是使用RAILS_ENV常量。同样,您可以使用RAILS_DEFAULT_LOGGER获取当前记录器,或者使用RAILS_ROOT获取根文件夹的路径。
从Rails 2开始。x, Rails用一些特殊的方法引入了Rails模块:
Rails.root Rails.env Rails.logger
这不仅仅是表面上的改变。Rails模块提供了使用标准常量(如StringInquirer支持)所不具备的功能。 也有一些细微的区别。Rails。root返回的不是一个简单的字符串,而是一个路径实例。
无论如何,首选的方法是使用Rails模块。常量在Rails 3中已弃用,并将在未来的版本(也许是Rails 3.1)中被移除。
根据文档,#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。环境是包裹在一个 StringInquirer对象,而不是 调用: Rails。Env == "生产" 你可以调用它: Rails.env.production吗?
所以它们并不完全相等,但相当接近。我还没有经常使用Rails,但是我要说#Rails。由于使用StringInquirer, env当然是更有视觉吸引力的选择。
ENV['RAILS_ENV']现在已弃用。
您应该使用Rails。Env显然要好得多。
推荐文章
- 如何确定一个数组是否包含另一个数组的所有元素
- Rails find_or_create_by多个属性?
- Rails ActiveRecord日期之间
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- Rails:dependent =>:destroy VS:dependent =>:delete_all
- 对于PostgreSQL表来说,多大才算太大?
- Rails:如何在Rails 4中引用CSS中的图像
- 如何使用RSpec的should_raise与任何类型的异常?
- Rails -嵌套包括活动记录?
- Delete_all vs destroy_all
- Rails获取“each”循环的索引
- 在rails redirect_to中传递参数
- Rails new vs create
- Rails has_many的别名
- Ruby:包含的反义词是什么?Ruby数组?