2011-12-26 35 views
0

我得到一些意外的行爲,rake db:migraterake db:rollback。我希望有人能夠爲我揭開一些光。爲什麼「rake db:migrate」和「rake db:rollback」不能一次回滾多個遷移?

我通過添加一個衝突的問題而使我的遷移變得很糟糕,而且我試圖遷移回0,以便我可以再次遷移並繼續知道一切都會正常工作。

我正在運行rake db:migrate version=0並剛剛在命令行中退出,沒有報告遷移並且對我的數據庫沒有影響。我有一個Rakefile,並且我的database.yml文件設置了正確的登錄憑證。

四處遊蕩,我發現我能夠去rake db:rollback step=1沒有問題:適當的行動將發生在遷移。但是,rake db:rollback step=2(或步驟= 3或步驟= 5 - 除1以外的任何內容)只能一次執行一次遷移。

在終端中使用mysql完全刪除數據庫。重新創建它,然後去rake db:migrate。所有的桌子都是按照他們應有的方式建造的。我認爲所有破碎的東西都是固定的。

所以我去了rake db:migrate version=0 ....再次沒有任何事情發生。表仍然存在於數據庫中,它應該已經回到空白狀態。

有沒有人有任何想法?在這裏,我的頭皮幾乎已經劃破了一個洞。

手動刪除數據庫和運行我的遷移後,rake db:migrate version=0 --dry-run --trace給我的迴應:

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute (dry run) environment 
** Execute (dry run) db:migrate 

我在這一點上遷移都只是RailsTutorial.org的,重複的這是我一直直到現在作爲一種學習練習;他們都有self.down方法,他們都工作,當我一次回來一個。

唯一可能相關的其他事情是我在另一臺計算機上完成了該教程(我的電腦);我把它推到github上,並將它克隆到我的Mac上,以便將教程作爲我自己工作的起點。這款應用在我的Mac瀏覽器(與PC相同)上似乎運行良好,儘管我一直在關注無數的教程,第一次在Mac上設置Rails環境(RVM),而我已經安裝了不同的寶石來這樣做。我的問題可能源於此嗎?

感謝您的任何建議!

回答

4

article可能會幫助你。

基本上,你可以調整db:rollback任務。

namespace :db do 
    desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n' 
    task :rollback => :environment do 
    step = ENV['STEP'] ? ENV['STEP'].to_i : 1 
    version = ActiveRecord::Migrator.current_version - step 
    ActiveRecord::Migrator.migrate('db/migrate/', version) 
    end 
end 

所以現在你可以這樣做:

rake db:rollback STEP=3 
+0

那麼,怎麼樣。解決了。完全真棒 - 謝謝謝爾蓋! – Reb 2011-12-26 11:43:07

+0

我正在努力解決如何!這是我的第一篇文章! ;) – Reb 2011-12-26 11:45:45

+2

Psst,只是爲了讓那些可能引用它的人都有用,因爲原來的答案已經被調整,重點也不完全相同:不使用CAPITAL LETTERS(用於STEP和VERSION)是我出錯的地方。爲此再次歡呼! :) – Reb 2011-12-26 12:35:04

相關問題