我有这个小佣金任务:
namespace :db do
namespace :test do
task :reset do
ENV['RAILS_ENV'] = "test"
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
end
end
end
现在,当我执行时,它将忽略我尝试硬编码的 RAILS_ENV。我如何使这个任务按预期工作
最佳答案
对于这个特定的任务,您只需要更改数据库连接,正如 Adam 指出的那样,您可以这样做:
namespace :db do
namespace :test do
task :reset do
ActiveRecord::Base.establish_connection('test')
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
ActiveRecord::Base.establish_connection(ENV['RAILS_ENV']) #Make sure you don't have side-effects!
end
end
end
如果您的任务更复杂,并且您需要 ENV 的其他方面,那么您最安全的做法是生成一个新的 rake 进程:
namespace :db do
namespace :test do
task :reset do
system("rake db:drop RAILS_ENV=test")
system("rake db:create RAILS_ENV=test")
system("rake db:migrate RAILS_ENV=test")
end
end
end
或
namespace :db do
namespace :test do
task :reset do
if (ENV['RAILS_ENV'] == "test")
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
else
system("rake db:test:reset RAILS_ENV=test")
end
end
end
end
关于ruby-on-rails - 我如何在 rake 任务中强制使用 RAILS_ENV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090176/