2011-03-07 111 views
1

我想我可能已经删除了一个迁移文件 - 我有很多,因为我一直在改变我的表格。如果我删除一个迁移文件会影响heroku吗?

我想知道这是否会影响我的heroku部署。我的heroku rake db:migrate之前工作正常,但现在已停止工作。

heroku还告诉我,表已经存在,并中止耙任务。

我需要重新编写缺少的迁移文件吗?

感谢您的任何帮助,我真的很感激它。

+0

你永远不应该删除迁移文件。为避免意外删除它们,您应该使用版本控制系统。 – 2011-03-07 23:24:52

回答

6

不,我不认为你可以重新编写迁移..除非你知道datestamp是用于迁移文件名的。如果您查看db文件夹中的迁移文件的文件名,您会注意到它们都是有日期戳的。

此日期戳实际上存储在您要写入数据库的字段中。如果你签出你的数据库,你会注意到一个'schema_migrations'表,你会发现你已经运行的所有迁移的日期戳。

如果您继续删除迁移文件,迁移是棘手的。如果可以的话,我会尽量不要删除较早的迁移,尤其是如果它们已经推送到数据库。如果您已经将它们推送到数据库,那么创建一个新的迁移文件来修复数据库比回到旧的迁移和重构..它会让你一个痛苦的世界试图这样做...

在你把它拆开之前,先在本地备份你的heroku数据库,然后再尝试修复你的迁移

heroku db:pull 

如果您还没有推你删除的迁移文件到您的Heroku的分支,你只能用你的最后迁移文件播放,尝试回滚在Heroku上你最后的迁移第一,解决您的migrat离子,推回去,再试一次。

heroku rake db:rollback 

如果你已经尝试过这种方式,你仍然遇到问题,你可以做到以下几点。但要警告!你看到的错误是因为你试图将表推送到已存在的数据库。如果您在新迁移中添加force => true标记,则可以将其有效地推送到数据库,但实际上您将删除现有的表并创建新的表,因此旧表中的任何数据都将丢失。但是,如果你确定并确信你不会破坏任何东西,你可以在迁移的顶部使用类似的东西。

create_table "table_name", :force => true do |t| 
    t.column "name", :string.... 
+0

优秀,深入的答案。 – 2011-03-08 03:08:22

+0

感谢您的文章! – hanumanDev 2011-03-08 12:52:02

相关问题