当检查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 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)中被移除。
在调试我的应用程序时奇怪的行为: 需要“active_support /通知” (rdb:1) p ENV['RAILS_ENV'] “测试” (rdb:1) p Rails.env “发展”
我会说你应该坚持使用其中一个(最好是Rails.env)
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- ActiveRecord OR查询
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 在Rails中使用user_id:integer vs user:references生成模型
- 如何测试参数是否存在在轨道
- 验证多个列的唯一性
- Rails:在where语句中使用大于/小于
- Rails:如何为Rails activerecord的模型中的属性创建默认值?
- 库未加载:libmysqlclient.16。在OS X 10.6上使用mysql2 gem运行'rails server'时出现dylib错误
- 如何确定一个数组是否包含另一个数组的所有元素
- Rails find_or_create_by多个属性?
- Rails ActiveRecord日期之间
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- Rails:dependent =>:destroy VS:dependent =>:delete_all
- 对于PostgreSQL表来说,多大才算太大?