ruby on rails -在Rake任务中运行db:test:prepare会抛出环境



我有以下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是正确的,如果我从clone任务中删除Rake::Task["db:test:prepare"].invoke,但我不确定为什么

我猜第一个任务不使用控制台环境,因为它为rake创建了自己的终端会话,第二个任务使用控制台环境。

尝试printenv并比较变量

还可以尝试使用RAILS_ENV=development或任何您想要的环境作为命令的前缀。

guides.rubyonrails.org指示任务db:test:prepare用于对测试数据库执行以下操作:

    删除数据库创建数据库
  1. 运行迁移

在此任务完成后,您将没有任何数据在那里。下面是解释这个问题的堆栈溢出答案:

  1. PG undefinedtable错误关系用户不存在
  2. rake db:test:prepare到底做了什么

我相信你所看到的行为与环境无关,而是对这个rake任务意图的误解。

最新更新