如何使用参数从另一个rake任务运行db:migrate?

时间:2014-08-14 23:46:38

标签: ruby-on-rails ruby

我想从另一个rake任务调用db:drop,db:create,db:migrate并指定数据库,如命令“rake db:migrate db = test”。这样我可以连续几个不同的数据库调用它。

但设置Rails.env ='test'然后将其Rails.env重置为新环境不起作用。

但是上面的代码总是在开发环境中执行(如果我拿出开发环境,我会得到这个错误

如何多次调用这些任务并将环境更改为我们?

2 个答案:

答案 0 :(得分:2)

ActiveRecord设置环境后,您必须直接告诉它以更改环境。所以这会奏效。

ActiveRecord::Tasks::DatabaseTasks.env = 'test'
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute 

ActiveRecord::Tasks::DatabaseTasks.env = 'development'
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute   

答案 1 :(得分:0)

如果您只想临时使​​用测试数据库,请将数据库连接设置为 test ,然后在任务完成时将其设置回默认值:

Rails.env = 'test
Rake::Task['db:migrate'].invoke
Rails.env = ENV["RAILS_ENV"]