如果我删除迁移文件会影响heroku吗?

时间:2011-03-07 19:47:11

标签: ruby-on-rails ruby-on-rails-3 heroku

我想我可能已经删除了一个迁移文件 - 我有很多因为我一直在更改我的表格。

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

heroku也告诉我一个表已经存在并且中止了rake任务。

我是否需要重新编写丢失的迁移文件?

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

1 个答案:

答案 0 :(得分:6)

不,我认为您无法重新编写迁移..除非您当然知道迁移文件名的日期戳是什么。如果你在db文件夹中查看迁移文件的文件名,你会发现它们都是带有日期戳的。

此日期戳实际上存储在您要写入的数据库的字段中。如果您检查数据库,您会注意到'schema_migrations'表,在那里您可以找到已经运行的所有迁移的日期戳。

如果继续删除迁移文件,迁移是很棘手的事情。如果可以的话,我会尽量不删除旧的迁移,特别是如果它们已经被推送到你的数据库了。如果你已经将它们推送到数据库,那么如果你创建一个新的迁移文件来修复你的数据库而不是去回到旧的迁移和重构......它会让你痛苦地试图这样做......

在开始拆分之前,请先尝试在本地备份heroku数据库,然后再尝试修复迁移

heroku db:pull

如果您尚未将已删除的迁移文件推送到heroku分支,并且您只使用上一个迁移文件,请尝试首先在heroku中回滚上次迁移,修复迁移,将其推回并重试

heroku rake db:rollback

如果您已经尝试过这种方式并且仍然遇到问题,则可以执行以下操作。但要注意!!您看到的错误是因为您正在尝试将表推送到已存在的数据库。如果你把force =>您的新迁移上的true标记可以有效地将其推送到您的数据库,但实际上您将删除现有表并创建一个新表,以便旧表中的任何数据都将丢失。但如果你对它好,并且相信你不会破坏任何东西,你可以在迁移的顶部使用这样的东西..

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