gpt4 book ai didi

ruby-on-rails - 我如何在 rake 任务中强制使用 RAILS_ENV?

转载 作者:数据小太阳 更新时间:2023-10-29 06:22:10 26 4
gpt4 key购买 nike

我有这个小佣金任务:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com