2013-12-20 116 views
3

如何在rake數據庫中使用「** NO FILE **」刪除遷移ID列表:migrate:status?例如:Rails 4從遷移索引中刪除遷移ID

Status Migration ID Migration Name 
-------------------------------------------------- 
    up  20131017204224 Create users 
    up  20131218005823 ********** NO FILE ********** 
    up  20131218011334 ********** NO FILE ********** 

我不理解爲什麼它仍然會保持一個老移民文件時,我手動刪除它自己,因爲我與遷移是如何工作的玩弄。這是爲了記錄嗎?但是當我沒有與之相關的名字時,它有什麼用?

我試過對這些文件使用db:migrate:down命令,但它說缺少文件。我不知道該怎麼做。

有人可以解釋如何刪除此列表,也許一些洞察,爲什麼會發生這種情況。我是比較新的回報率,所以請裸跟我:)

感謝,

回答

5

您需要刪除該號碼從您的schema_migrations數據庫表中。

+0

聽起來不像我想要的勺子喂,但在調查schema_migrations後..我猜我想重新加載它的架構重建?我使用了這個命令'rake db:schema:dump'' rake db:schema:load',但沒有文件列表仍然存在。我也猜測它是某種ActiveRecord :: Schema方法來刪除數據庫中的特定版本? – Jay

+1

如果您希望從'schema_migrations'表中刪除遷移編號,那麼在刪除文件之前,只需運行'rake db:rollback'即可恢復遷移。 – spickermann

+0

但是,如果我在運行'rake db:rollback'命令之前刪除了該文件呢? – Jay

7

您刪除了該文件,但ID仍在架構表中。

只需登錄到MySQL

SELECT * FROM schema_migrations; *- take note of the version_id* 

然後

DELETE FROM schema_migrations WHERE VERSION = version_id; 

然後註銷並驗證

rake db:migrate:status 
4

你可以也使用SQL刪除它,但通過rails控制檯。

sql = "DELETE FROM schema_migrations WHERE VERSION = 'version_id'" 
ActiveRecord::Base.connection.exec_query(sql)