2013-04-10 69 views
0

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

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

的问题是,我因为它们在后期迁移文件中添加缺少的列的播种时收到错误。一个示例:

undefined method new_attr= for User 

此属性已添加到迁移中。奇怪的是,我收到没有错误,如果我分别运行上述任务。任何人都可以点亮一下吗?当然,这些任务不能异步运行。

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

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

回答

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 
1

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

rake db:reset 

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

你试过命名空间吗?

任务:重置=> [DB:降,DB:创建,分贝:迁移,DB:种子]

1

如果这些rake任务在生产模式下执行,则 模型属性将被缓存。即使迁移工作完美,它也不适用于缓存。 这将破坏您的成功种子,因为新添加的列将在缓存中丢失。 可能的解决方案是在播种前重新加载您的导轨环境。