我遇到了一个很奇怪的问题。 我有我的重置数据库,这样一个任务:
task :reset => [:drop, :create, :migrate, :seed]
问题是,因为这是在后期迁移文件中添加缺少的列的种子,当我收到错误。 举个例子:
undefined method new_attr= for User
然而,这个属性是在迁移已经添加。 奇怪的部分是,我收到没有错误,如果我单独运行上述任务。 任何人都可以提供一些线索? 当然,这些任务无法异步运行。
避免错误的另一种方法是修改我的早期移民与新属性CREATE_。 然后运行:复位不会触发这些属性的错误。
该迁移显然是罚款,我可以单独运行上面的任务,只是一个单一的任务下没有捆绑。
也许你想使你的重置任务更加明确?
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 db:reset
耙分贝:重置任务将删除数据库,重新创建它和当前的架构加载到其中。
你有没有命名空间试过吗?
任务:复位=> [分贝:降,分贝:创建,分贝:迁移,分贝:种子]
如果这些耙任务是在生产模式下执行,模型属性缓存。 尽管迁移工作完美,它不会应用到缓存。 这将打破你成功的种子作为新添加的列将在缓存中丢失。 一个可能的解决方案是播种前重新加载你的Rails环境。