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

han*_*Dev 1 ruby-on-rails heroku ruby-on-rails-3

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

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

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

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

谢谢你的帮助,我真的很感激.

2po*_*kes 6

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

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

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

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

heroku db:pull
Run Code Online (Sandbox Code Playgroud)

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

heroku rake db:rollback
Run Code Online (Sandbox Code Playgroud)

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

create_table "table_name", :force => true do |t|
     t.column "name",  :string....  
Run Code Online (Sandbox Code Playgroud)