ruby-on-rails - Rails 中的聚合迁移

标签 ruby-on-rails database migration

我有几十个 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/

相关文章:

mysql - 如何在 mysql 中使用 laravel 迁移将数据库列 'null' 更改为 'nullable'?

php - 您将 PHP 4 迁移到 PHP 5 的经验

ruby-on-rails - 使用最大距离属性反向查询 Rails-Geocoder 中的位置

sql - rails has_many 至少有一个 child 具有值(value)

database - 查找没有特定关系的节点 (Cypher/neo4j)

sql - 从多个表中获取信息的查询

ruby-on-rails - 如果我使用 :class_name attribute to has_one, 我在迁移中放了什么?

ruby-on-rails - Rails Active Record-从关系中获取ID数组

ruby-on-rails - 检查外部API是否在线/离线

database - 使用 Datomic 嵌套结构