改变环境里面的环境增强

时间:2013-12-25 22:08:07

标签: ruby-on-rails rake

我想增强现有的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任务?

感谢。

1 个答案:

答案 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

我在本地进行了测试,它按预期工作。