我想调用db:drop, db:create, db:migrate从另一个rake任务,并指定数据库像命令"rake db:migrate db=test"。这样我就可以在一行中为几个不同的数据库调用它。
但是设置Rails。env = 'test',然后重置它Rails。羡慕一个新环境是行不通的。
但是上面的代码总是在开发环境中执行(如果我取出开发环境,我会得到这个错误
)我如何多次调用这些任务并改变我们的环境?
一旦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
如果您只想临时使用测试数据库,请将数据库连接设置为test,然后在任务完成时将其设置回默认值:
Rails.env = 'test
Rake::Task['db:migrate'].invoke
Rails.env = ENV["RAILS_ENV"]