我一直在使用Ruby on Rails开发一个项目。在开发过程中,我为我的项目生成了大量的迁移文件。有时我添加和删除了不同表中的列。
有没有办法可以将多个文件中的所有迁移合并到一个文件中?
答案 0 :(得分:9)
您需要的不是一整套整合的迁移;它是单个模式文件和可选的 seeds.rb 文件。 Rails一般为maintains the schema automagically when you run migrations,所以你已经拥有了你应该需要的大部分内容,除了种子数据之外,如下所述。
通常,您不应该维护大量迁移。相反,您应该定期清除迁移,并使用 schema.rb 或 schema.sql 来(重新)创建数据库。 Rails guides specifically state:
通过重播整个迁移历史记录,无需(并且容易出错)部署应用程序的新实例。只需将当前模式的描述加载到数据库中就简单快捷了......由于模式转储是数据库模式的权威来源,因此强烈建议您将它们检入源代码控制中。
因此,您应该使用bin/rails db:schema:load
而不是运行迁移,或者在旧版本的Rails上运行相关的Rake任务。
虽然您可以使用迁移来修复或修复与最近架构更改相关的数据,但数据迁移(如果使用的话)应该是临时工件。数据迁移几乎从不是幂等的,因此您不应长期维护数据迁移。 The guide says:
有些人使用迁移将数据添加到数据库中......但是,Rails有一个“种子”功能,应该用于为初始数据播种数据库。这是一个非常简单的功能:只需用一些Ruby代码填充db / seeds.rb,然后运行rake db:seed ...这通常是设置空白应用程序数据库的一种更简洁的方法。
数据库种子数据应该加载bin/rails db:seed
(或关联的Rake任务),而不是在迁移中维护数据。
答案 1 :(得分:2)
有一个宝石声称可以完全按照您在问题中描述的内容进行操作 - 请查看Squasher。
来自自述文件: " Squasher压缩Rails应用程序中的旧迁移。 ... Squasher删除所有迁移并使用指定日期的最终数据库状态创建单个迁移(新迁移将看起来像一个模式)。"
答案 2 :(得分:1)
您必须手动执行合并 。
但如果您只想要一个文件,则db/schema.rb
。它包含当前数据库架构的快照。如果需要,可以直接将其加载到数据库中。