繁体   English   中英

Rails.env与RAILS_ENV

[英]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.root
  • Rails.env
  • Rails.logger

这不仅仅是化妆品的改变。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM