重新排序/更改迁移文件上的时间戳

Fel*_*ger 3 postgresql ruby-on-rails rails-migrations ruby-on-rails-5

我的一个迁移文件正在引用另一个表/模型,该表/模型将在迁移序列中进一步创建。

Postgres 不喜欢这样:

PG::UndefinedTable:错误:关系“用户”不存在

所以我想知道手动重新排序迁移文件(通过发明新的时间戳/前缀)是否存在任何潜在问题?

受影响的表已经向下迁移。

two*_*ves 5

当您运行rake db:migrate命令时,它会比较schema_migrations位于 db/migrate 文件夹中的表和迁移文件。所有未执行的迁移都会收到MigrationClass#up调用。

因此,从您的代码已经发布和/或迁移由其他用户运行的那一刻开始,更改您的迁移时间戳/名称可能会导致无法处理的迁移过程(因为schema_migrations会将具有更改时间戳的迁移视为新的、未处理的迁移,并尝试“再次”处理它)。可能的解决方法是对up方法的内容进行一段时间的注释,并在迁移完成后取消注释。为了好玩,您还可以schema_migrations直接从数据库控制台操作表(添加或删除必要的记录)。但这两种方式听起来都像是黑客。

在那之前......一切都应该完美无缺。