[英]Rails.env vs RAILS_ENV
我在示例中看到了两个运行中的env的内容。什么是首选? 出于所有意图和目的,它们是否相等?
根据文档 , #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 2.x之前,获取当前环境的首选方法是使用RAILS_ENV
常量。 同样,您可以使用RAILS_DEFAULT_LOGGER
获取当前记录器或RAILS_ROOT
以获取根文件夹的路径。
从Rails 2.x开始,Rails为Rails
模块引入了一些特殊方法:
这不仅仅是化妆品的改变。 Rails模块提供了使用标准常量(如StringInquirer
支持)所不具备的功能。 还有一些细微的差别。 Rails.root
不返回简单的String
但是返回Path
实例。
无论如何,首选方法是使用Rails
模块。 常量在Rails 3中已弃用,将在未来版本中删除,可能是Rails 3.1。
ENV['RAILS_ENV']
现已弃用 。
你应该使用Rails.env
,这显然更好。
调试我的应用程序时出现奇怪的行为:需要“active_support / notifications”(rdb:1)p ENV ['RAILS_ENV']“test”(rdb:1)p Rails.env“development”
我会说你应该坚持一个或另一个(最好是Rails.env)
更新:在Rails 3.0.9中:在railties / lib / rails.rb中定义的env方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.