耙连续任务(Rake sequential tasks)

2019-10-29 13:41发布

我遇到了一个很奇怪的问题。 我有我的重置数据库,这样一个任务:

task :reset => [:drop, :create, :migrate, :seed]

问题是,因为这是在后期迁移文件中添加缺少的列的种子,当我收到错误。 举个例子:

undefined method new_attr= for User

然而,这个属性是在迁移已经添加。 奇怪的部分是,我收到没有错误,如果我单独运行上述任务。 任何人都可以提供一些线索? 当然,这些任务无法异步运行。

避免错误的另一种方法是修改我的早期移民与新属性CREATE_。 然后运行:复位不会触发这些属性的错误。

该迁移显然是罚款,我可以单独运行上面的任务,只是一个单一的任务下没有捆绑。

Answer 1:

也许你想使你的重置任务更加明确?

namespace :db_tasks do
  desc "Rebuild development db"
  task :rebuild_database, [] => :environment do
    raise "Only run in development or staging" if Rails.env.production?

    Rake::Task['db:drop'].execute
    Rake::Task['db:create'].execute
    Rake::Task['db:migrate'].execute
    Rake::Task['db:seed'].execute
    Rake::Task['db:test:prepare'].execute
  end
end


Answer 2:

也许你的问题是使用这个已经解决:

rake db:reset

耙分贝:重置任务将删除数据库,重新创建它和当前的架构加载到其中。

你有没有命名空间试过吗?

任务:复位=> [分贝:降,分贝:创建,分贝:迁移,分贝:种子]



Answer 3:

如果这些耙任务是在生产模式下执行,模型属性缓存。 尽管迁移工作完美,它不会应用到缓存。 这将打破你成功的种子作为新添加的列将在缓存中丢失。 一个可能的解决方案是播种前重新加载你的Rails环境。



文章来源: Rake sequential tasks