2014-03-24 39 views
2

我最近升級從Rails的3.2.15我的應用程序的Rails 4.0.4和耙測試失敗拋出未決遷移錯誤:軌道4拋出即使沒有掛起的遷移

You have 161 pending migrations: 
    20111126090934 DeviseCreateUsers 
    20111126195631 AddUsernameToUsers 
    20111128012039 CreateLocations 
    20111129051416 AddConfirmableToDevise 
... 
Run `rake db:migrate` to update your database then try again. 

我相信,我不沒有任何掛起的遷移,並且schema_migrations表是最新的,具有所有遷移版本號。此外,

[2] pry(main)> ActiveRecord::Migration.check_pending! 
    ActiveRecord::SchemaMigration Load (0.4ms) SELECT `schema_migrations`.* FROM `schema_migrations` 
=> nil 
[3] pry(main)> 

因爲,這是開發環境,我也試圖與reset db

$> rake db:migrate:reset 

我在Rails中3.2.15移動我的應用程序的Rails 4.0.4的過程。我在這裏不知所措,不理解正在發生的事情。

$> rake db:migrate:status 

Status Migration ID Migration Name 
-------------------------------------------------- 
    up  20111126090934 ********** NO FILE ********** 
    up  20111126195631 ********** NO FILE ********** 
    up  20111128012039 ********** NO FILE ********** 
    up  20111129051416 ********** NO FILE ********** 
... 
+0

當您嘗試和復位,會發生什麼?它似乎重置正確? –

+0

@ MikeH-R是的。沒有錯誤拋出並且命令完成。但是,在耙測試中,它再次顯示待處理的遷移。 –

+0

@rails4guides.com錯誤:不知道如何構建任務'rake db:status' –

回答

3

這是一點都不奇怪和令人沮喪的。我有db/migrate目錄中的子文件夾,即使較舊且已遷移,由於某種原因,通過ActiveRecord::Migrator#pending_migrations列出,因此錯誤。刪除子文件夾修復了這個問題。

想知道這是如何在Rails 3中工作,並找不到任何關於此的文檔。

+0

我碰到了同樣的問題(也有子文件夾),但我指定了一個特定的子文件夾,Rails應該用於每個env的遷移env的配置文件,但這仍然發生在我身上由於某種原因 – sixty4bit

+0

@ sixty4bit我有同樣的問題,你有什麼解決方案嗎? – Hadas

+0

你如何實例化一個新的ActiveRecord :: MIgrator對象?我剛剛開始使用postgres在我的測試環境中遇到同樣的問題。這是一個奇怪而令人沮喪的錯誤,因爲似乎沒有關於如何調試的真實信息。 –

-1

當你嘗試運行rake test,你需要在test環境中運行遷移。

rake db:migrate RAILS_ENV=test

+0

沒有幫助。實際上,當我們進行rake測試時,它會調用db:test:prepare來加載模式並運行掛起的遷移。請參閱:http://stackoverflow.com/a/15170024/210273 –

2

此錯誤的最可能原因是mysqldump不在您的PATH中。 Rails 4需要創建測試數據庫,並且如果找不到,則會給出有關遷移的混淆錯誤。

的MySQL的OSX上的默認安裝不包括在你的PATH MySQL或mysqldump的,你就需要修改你的〜/ .profile文件並添加類似:

export PATH=$PATH:/usr/local/mysql/bin 

或者從自制重新安裝mysql 。

0

爲了增加賽義德的回答是:

而是在db/migrate/刪除子文件夾中,也可以將其重命名開始一個「」。這對我來說activerecord 3.2。

例如:重命名db/migrate/archive/db/migrate/.archive/