我有以下2 rake
个任务:
task :clone => :environment do |t, args|
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
system "pg_restore -O -d database_name last_dump"
Rake::Task["db:migrate"].invoke
Rake::Task["db:test:prepare"].invoke
# Try to force the rails env to reload, but this doesn't solve the problem
Rake::Task["environment"].execute
Rake::Task["db:company_count"].invoke
end
task :company_count => :environment do
puts Company.count
end
当我运行rake db:clone
输出时,Company.count
为0表示数据库中没有公司,但是当我运行rake db:clone && rake db:company_count
时输出为2.
如何在第一个任务中加载数据库后获得正确的Company.count
?
如果我从Company.count
任务中移除Rake::Task["db:test:prepare"].invoke
,clone
是正确的,但我不确定原因
答案 0 :(得分:1)
我的猜测是第一个任务是不使用控制台环境,因为它为rake创建了自己的终端会话,第二个是。
尝试printenv
并比较变量
还尝试使用RAILS_ENV=development
或任何您想要的环境为命令添加前缀。
答案 1 :(得分:1)
guides.rubyonrails.org表示任务db:test:prepare
用于对您的测试数据库执行以下操作:
完成此任务后,您将无法获得任何数据。这是堆栈溢出答案,解释了这一点:
我相信你所看到的行为与环境无关,而是对这种佣金任务的误解。