【发布时间】:2011-07-28 09:36:09
【问题描述】:
我在lib/tasks 文件夹中定义了以下 rake 任务:
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
现在,它的作用是在我运行 rake db:test:prepare 时为测试数据库播种。我这样做是因为我有一些基本记录必须存在才能让应用程序运行,所以它们不是可选的,也不能真正被模拟。
另外,我有一个模型在开发和生产中使用 S3 进行资产存储,但我不希望它使用 S3 进行测试。我在模型中设置了一个方法,将存储路径从 S3 更改为本地 if Rails.env.test?
但是,这不起作用。我想知道 rake 任务是否知道它被调用的环境,结果证明它不是。我把它放在我的seeds.rb 文件的顶部:
puts "Environment Check: Rails Environment = #{Rails.env}"
果然,当任务运行时打印出:Environment Check: Rails Environment = development
那么,我怎样才能重做这个 rake 任务,以便在它为测试数据库播种时知道它正在为测试数据库播种??
【问题讨论】:
-
如果
Rails.env没有给你正确的值,那真的很奇怪。看看别处(如何/你在叫什么)。 -
老实说,仅此而已。我在控制台中输入
rake db:test:prepare,当它遇到种子任务时,它会输入environment=development。
标签: ruby-on-rails ruby-on-rails-3 rake environment seed