2016-08-02 25 views
1

在Rails中,有時我們得到錯誤Rails如何知道遷移正在等待?

ActiveRecord::PendingMigrationError

怎麼知道的Rails遷移未決?

標誌/信息存儲在哪裏?

+0

檢查你的數據庫,有一個表'schema_migrations'。參見[文檔](http://api.rubyonrails.org/classes/ActiveRecord/Migration.html)和[相關問題](http://stackoverflow.com/questions/12057408/how-does-rails-keep- track-of-migrations-have-run-for-a-database?rq = 1) –

回答

1

當創建模型或遷移時,會將時間戳添加到文件名中。

  20160727050119_create_user.rb 
     #time-stamp 20160727050119 

然後檢索最後一個遷移標記的方法call(env)

 `mtime = ActiveRecord::Migrator.last_migration.mtime.to_i` 

,並把它比作@last_check,如果小於mtime

check_pending!被調用,顯示ActiveRecord::PendingMigrationError

 ActiveRecord::Migration.check_pending!(connection) 

check_pending!

 def check_pending!(connection = Base.connection) 
     raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection) 
     end 

你可以找到所有這些信息.../lib/active-record/migration.rb

+0

有用的信息,並解釋了我遇到的問題:如果您提交了schema.rb文件並且無法提交版本參數複製到文件頂部的'ActiveRecord :: Schema.define'以及其他更改,它可能會導致其他人(在我的情況下爲CI系統)在嘗試運行測試時獲取掛起的遷移錯誤,因爲模式版本小於最近遷移的時間戳。 – Leo

0

。在你的應用程序的數據庫中的表稱爲schema_migrations,有所謂的版本一列。每個已經運行的遷移都會有一行。如果光盤上有一個遷移文件,其時間戳未包含在schema_migrations表中,那麼Rails知道需要運行遷移。

相關問題