簡體   English   中英

Heroku rake db:migrate

[英]Heroku rake db:migrate

Heroku告訴我,有些遷移尚未運行,但顯然它們已經存在。 它似乎落后於一次遷移。 我怎么能解決這個問題。

當我運行rake db:migrate它告訴我rake aborted Mysql2::Error: Duplicate column name 我知道這些字段已經創建,也很確定遷移已經運行,因為這些字段在任何其他遷移中都不存在,並且rake db:migrate在我的本地系統上運行正常。

我怎樣才能解決這個問題? 我認為Heroku只是沒有意識到它已經進行了遷移。 我怎么能告訴它“你已經運行了遷移xxx”?

這可能意味着你曾經運行過一次,但它失敗了; mysql中的表更改不是事務性的,因此您可以處於錯誤狀態。 某些更改可能已經運行,但並非所有更改都已運行。

您唯一能做的就是確定已運行的部分,在遷移中注釋掉這些部分,提交並推送並運行遷移,繞過已經運行的部分。

如果未完全應用遷移,請執行以下操作之一:

  • 使用dbconsole撤消已應用的更改,然后再次運行遷移,或
  • 使用dbconsole手動更改剩余的架構,然后將記錄插入schema_migrations表。

根據遷移腳本中的更改類型,您需要確定上述哪個更容易。 如果已應用的更改是破壞性更改(例如刪除列或表),則可以重新創建列或表,以便能夠運行遷移。 如果剩下的更改很容易轉換為SQL,那么這可能會更容易。

將記錄插入schema_migrations表將允許應用程序認為已成功應用遷移。 僅當您完全滿意遷移更改已完全應用時才執行此操作。 它有一列, version ,需要包含遷移文件名的數字部分。

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html http://guides.rubyonrails.org/migrations.html

最后,這是為什么你應該使用Postgres而不是MySQL的一個例子。 Postgres能夠在事務中回滾(大多數)架構更改,因此您不會留下半應用的遷移。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM