Reorder/change 迁移文件的时间戳
Reorder/change timestamp on migration files
我的一个迁移文件引用了另一个 table/model,它将在迁移序列中进一步创建。
Postgres 不喜欢这样:
PG::UndefinedTable: ERROR: relation "users" does not exist
所以我想知道手动重新排序迁移文件(通过发明新的timestamps/prefixes)是否有任何潜在的问题?
受影响的表已经向下迁移。
当您使用 运行 rake db:migrate
命令时,它会比较 schema_migrations
table 和位于 db/migrate 文件夹中的迁移文件。所有未执行的迁移都会收到 MigrationClass#up
调用。
因此,从您的代码已经发布的那一刻开始 and/or 其他用户 运行 迁移,更改您的迁移 timestamps/names 可能会导致无法处理的迁移过程(因为 schema_migrations
会将时间戳已更改的迁移视为新的、未处理的迁移,并尝试处理它 "again")。可能的解决方法是暂时注释 up
方法的内容,并在迁移完成后取消注释。为了好玩,您还可以直接从数据库控制台操作 schema_migrations
table(添加或删除必要的记录)。不过,这两种方式听起来都像是黑客攻击。
到那时......一切都应该完美无缺。
对于同样的情况,这是对我有用的方法,即使它是 hack。
Rails 运行s 按时间戳的顺序迁移,Rails 跟踪迁移文件名的时间戳部分 运行 哪些迁移,但是而不是文件名的其余部分。因此,如果您需要更改两个迁移的顺序,因为前一个引用了后一个,您可以通过重命名两个迁移文件来简单地切换文件名的 14 位数字时间戳部分。如果时间戳有一个数字的偏差 Rails 会认为这是一个新的迁移,所以在更改它们之前记下它们。
我的一个迁移文件引用了另一个 table/model,它将在迁移序列中进一步创建。
Postgres 不喜欢这样:
PG::UndefinedTable: ERROR: relation "users" does not exist
所以我想知道手动重新排序迁移文件(通过发明新的timestamps/prefixes)是否有任何潜在的问题?
受影响的表已经向下迁移。
当您使用 运行 rake db:migrate
命令时,它会比较 schema_migrations
table 和位于 db/migrate 文件夹中的迁移文件。所有未执行的迁移都会收到 MigrationClass#up
调用。
因此,从您的代码已经发布的那一刻开始 and/or 其他用户 运行 迁移,更改您的迁移 timestamps/names 可能会导致无法处理的迁移过程(因为 schema_migrations
会将时间戳已更改的迁移视为新的、未处理的迁移,并尝试处理它 "again")。可能的解决方法是暂时注释 up
方法的内容,并在迁移完成后取消注释。为了好玩,您还可以直接从数据库控制台操作 schema_migrations
table(添加或删除必要的记录)。不过,这两种方式听起来都像是黑客攻击。
到那时......一切都应该完美无缺。
对于同样的情况,这是对我有用的方法,即使它是 hack。
Rails 运行s 按时间戳的顺序迁移,Rails 跟踪迁移文件名的时间戳部分 运行 哪些迁移,但是而不是文件名的其余部分。因此,如果您需要更改两个迁移的顺序,因为前一个引用了后一个,您可以通过重命名两个迁移文件来简单地切换文件名的 14 位数字时间戳部分。如果时间戳有一个数字的偏差 Rails 会认为这是一个新的迁移,所以在更改它们之前记下它们。