我们正在升级到Ruby on Rails 3(现在就像世界的一半),我一直在努力取代RAILS_ENV的用法,例如
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?
Run Code Online (Sandbox Code Playgroud)
但我不确定如何处理:
ENV["RAILS_ENV"] ||= 'production'
Run Code Online (Sandbox Code Playgroud)
我们已将它放在一大堆Rake任务和守护进程的顶部,并且我们的想法是你可以传递RAILS_ENV命令行,但是如果它没有通过则默认为'production'.
我不确定新的Rails3适合的方式.所以现在我rails:upgrade:check很抱怨Rails2-ishness的这种入侵......
我不知道是否:
::Rails.env ||= 'production'
Run Code Online (Sandbox Code Playgroud)
将工作.
Rails.env守护进程中是否存在?
它是否自动获得预先填充在命令行上传递的RAILS_ENV的值,还是需要一种新的方式来调用守护进程?
对此有什么正确的口头禅?
更新:
查看源代码Rails.env,
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Run Code Online (Sandbox Code Playgroud)
我们可以推断出一些事情.
首先,它看起来RAILS_ENV确实仍然存在 - 这意味着它可以设置Rails.env并将找到它...
如果Rails在守护进程的上下文中有效,则不需要再进行任何操作.如果没有 - 那么我可以不在乎并RAILS_ENV像以前一样使用旧的.
作为一个学习练习,我正在使用Sinatra,Datamapper和RSpec构建练习应用程序.我正在使用这个模板,它基本上是上述所有的样板.
我遇到的问题是RSpec和Datamapper似乎配置的方式,每次运行测试数据库相关功能的规范时,这些测试直接更改我的开发数据库而不是测试数据库.
例如,我希望在运行其余规范之前创建一些数据库对象...
before(:all) {
Region.new(:country => "Canada", :country_code => "CA").save
ProductLine.new(:reference => "Molders").save
Product.new(:name => "The Black Molder").save
Cart.new(:price => 25.95).save
}
Run Code Online (Sandbox Code Playgroud)
然而,每次运行RSpec时,上述元素都会添加到我的开发数据库中.
为什么不生成测试数据库呢?如何让测试数据库正常工作?
除了Sinatra而不是Rails之外,这看起来与此问题非常类似.
如果有任何帮助,我的代码可以在这里看到.