Ruby on rails Rake顺序任务

Ruby on rails Rake顺序任务,ruby-on-rails,rake,Ruby On Rails,Rake,我遇到了一个非常奇怪的问题。我有一项任务,该任务将重置我的数据库,如下所示: task :reset => [:drop, :create, :migrate, :seed] 问题是,我在设定种子时收到错误,因为缺少在后期迁移文件中添加的列。一个例子: undefined method new_attr= for User 然而,该属性已经在迁移中添加。奇怪的是,如果我单独运行上述任务,我不会收到任何错误。有人能解释一下吗?当然,这些任务不能异步运行 另一种避免错误的方法是使用新属性修

我遇到了一个非常奇怪的问题。我有一项任务,该任务将重置我的数据库,如下所示:

task :reset => [:drop, :create, :migrate, :seed]
问题是,我在设定种子时收到错误,因为缺少在后期迁移文件中添加的列。一个例子:

undefined method new_attr= for User
然而,该属性已经在迁移中添加。奇怪的是,如果我单独运行上述任务,我不会收到任何错误。有人能解释一下吗?当然,这些任务不能异步运行

另一种避免错误的方法是使用新属性修改我以前的迁移。然后运行:重置不会触发这些属性的错误


迁移显然很好,因为我可以单独运行上述任务,而不是捆绑在单个任务下。

可能您的问题已经通过以下方法得到解决:

rake db:reset
rakedb:reset任务将删除数据库,重新创建它并将当前模式加载到其中

你试过名称空间吗

任务:重置=>[db:drop,db:create,db:migrate,db:seed]


您的问题可能已经通过以下方式解决:

rake db:reset
rakedb:reset任务将删除数据库,重新创建它并将当前模式加载到其中

你试过名称空间吗

任务:重置=>[db:drop,db:create,db:migrate,db:seed]


也许你想让你的重置任务更明确

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

也许你想让你的重置任务更明确

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

如果在生产模式下执行这些rake任务, 模型属性被缓存。即使迁移工作得很好,它也不会应用于缓存。 这将中断后续种子,因为缓存中缺少新添加的列。
一种可能的解决方案是在播种之前重新加载rails环境。

如果这些rake任务在生产模式下执行, 模型属性被缓存。即使迁移工作得很好,它也不会应用于缓存。 这将中断后续种子,因为缓存中缺少新添加的列。 一个可能的解决方案是在种子设定之前重新加载rails环境