我想增强现有的Rails 4 db:test:prepare
任务,以调用额外的db:seed
任务,将一些静态参考数据加载到我的测试数据库中。我在lib / tasks / test_seed.rake中编写了这个自定义任务:
Rake::Task['db:test:prepare'].enhance do
Rails.env = "test"
Rake::Task['db:seed'].invoke
end
但是,rake db:test:prepare
任务仍在播种开发db,直到我明确建立了与“test”的连接。这是有用的:
Rake::Task['db:test:prepare'].enhance do
Rails.env = "test"
ActiveRecord::Base.establish_connection('test')
Rake::Task['db:seed'].invoke
end
虽然,感觉不自然。是否有更好/正确的方法来增强最初针对开发环境的db:test:prepare
任务?
感谢。
答案 0 :(得分:1)
我认为这和你一样好。我遇到了同样的问题,这也是我使用它的唯一方法。
如果你想让它更优雅,你可以创建一个这样的方法:
def switch_environment(new_env, &block)
original_env = Rails.env
Rails.env = new_env.to_s
ActiveRecord::Base.establish_connection new_env.to_sym
block.call
ensure
Rails.env = original_env.to_s
ActiveRecord::Base.establish_connection original_env.to_sym
end
您可以这样调用它:
switch_environment :test do
...your code...
end
我在本地进行了测试,它按预期工作。