2013-04-10 80 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任務在生產模式下執行,則 模型屬性將被緩存。即使遷移工作完美,它也不適用於緩存。 這將破壞您的成功種子,因爲新添加的列將在緩存中丟失。 可能的解決方案是在播種前重新加載您的導軌環境。