我的一个迁移文件正在引用另一个将在迁移序列中进一步创建的表/模型。
Postgres不喜欢这样:
PG :: UndefinedTable:错误:关系“用户”不存在
所以我想知道手动重新排序迁移文件是否存在任何潜在问题(通过发明新的时间戳/前缀)?
受影响的表格已经向下迁移。
答案 0 :(得分:2)
运行rake db:migrate
命令时,它会比较位于db / migrate文件夹中的schema_migrations
表和迁移文件。然后,所有未执行的迁移都会收到MigrationClass#up
。
因此,从您的代码已发布和/或迁移由其他用户运行时开始,更改迁移时间戳/名称可能会导致无法处理的迁移过程(因为schema_migrations
将使用更改的时间戳处理迁移作为新的,未经处理的,并尝试“再次”处理它)。可能的解决方法是暂时评论up
方法的内容,并在迁移完成后取消注释。为了好玩,您还可以直接从数据库控制台操作schema_migrations
表(添加或删除必要的记录)。这两种方式都闻起来像是黑客。
答案 1 :(得分:0)
这对于我来说同样适用于这种情况,即使它是一个黑客。
Rails按时间戳的顺序运行迁移,Rails跟踪迁移文件名的时间戳部分运行的迁移,但不跟踪文件名的其余部分。因此,如果您需要更改两次迁移的顺序,因为前一次迁移引用后一种迁移,您只需通过重命名两个迁移文件来切换文件名的14位时间戳部分。如果时间戳被一个数字关闭,Rails会认为这是一个新的迁移,所以在更改之前将它们写下来。