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

Ruby on rails 如何使用参数从另一个rake任务运行db:migrate?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想从另一个rake任务调用db:drop、db:create、db:migrate,并像命令“rake db:migrate db=test”那样指定数据库。这样我就可以连续调用多个不同的数据库 但是设置Rails.env='test',然后将其重置为Rails.env到新环境是不起作用的 但是上面的代码总是在开发环境中执行(如果我去掉开发环境,我会得到这个错误) 如何多次调用这些任务并将环境更改为我们?如果您只想临时使用测试数据库,请将数据库连接设置为test,然后在任务完成后将其设置回默认

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

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

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


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

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

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

一旦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   

这适用于db:migrate和db:drop,但create仍然尝试使用开发。非常奇怪。相反,我只是将
rake db:create db=test
作为一个系统命令来运行它。非常奇怪。感谢您的帮助@infusedinteresting。尽管这在您第一次使用不同的轨道执行任务时起作用s、 env它将使用第一个Rails.env。它必须设置连接,然后重新使用它。我将深入研究代码,看看是否可以解决这个问题