我有几十个 Rails DB 迁移是在一年多的时间里编写的。有没有办法将它们聚合到一个迁移中,这样我就可以看到数据库现在存在的完整 DDL 语句?我只需要当前的快照,而不需要我们如何获得它的所有历史记录。
最佳答案
聚合迁移是可能的,但可能不是一个好主意!
也许会问:
- 你为什么要这样做?
- 您真正需要多长时间一直迁移到 VERSION=0 然后再次备份?
- 真的有东西坏了吗? (如果不是,则不要修复它)
我曾经遇到过同样的问题。我最终只是重新排序了我的迁移,因为模式的变化导致它不再正确向上/向下迁移。我会犹豫是否再这样做。
如果您有只添加字段或索引的迁移,那么也许您可以将它们与模型的主要迁移结合起来——但请注意您不能再重现旧情况,例如较旧的数据库转储可能与它们应该兼容的迁移编号不兼容——这可能是反对聚合的最大论据......
从技术上讲,您可以转储架构然后直接加载它 - 这是一种方式:
rake db:schema:dump
然后使用模式转储文件 db/schema.rb 的内容创建一个新的迁移
下面是一些类似的问题:
P.S.:我发现坚持使用旧的迁移编号方案很有用,其中迁移不使用时间戳 - 对我来说这效果更好(更容易看到它们的顺序)。
例如在你的 config/application.rb 文件中:
config.active_record.timestamped_migrations = false
关于ruby-on-rails - Rails 中的聚合迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678858/