Ruby on rails 如何在Rails中将所有迁移文件转换为单个文件?

Ruby on rails 如何在Rails中将所有迁移文件转换为单个文件?,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我一直在用RubyonRails开发一个项目。在开发过程中,我为我的项目生成了大量的迁移文件。有时我会从不同的表中添加和删除列 是否有一种方法可以将多个文件中的所有迁移合并到一个文件中?您必须手动执行合并 但是如果您只需要一个文件,则有db/schema.rb。它包含当前数据库架构的快照。如果需要,您可以直接将其加载到数据库中。TL;博士 您需要的不是一组整合的迁移;它是一个单独的模式文件和一个可选的seeds.rb文件。一般来说,Rails已经具备了您所需要的大部分功能,但下面描述的种子数据可

我一直在用RubyonRails开发一个项目。在开发过程中,我为我的项目生成了大量的迁移文件。有时我会从不同的表中添加和删除列


是否有一种方法可以将多个文件中的所有迁移合并到一个文件中?

您必须手动执行合并

但是如果您只需要一个文件,则有
db/schema.rb
。它包含当前数据库架构的快照。如果需要,您可以直接将其加载到数据库中。

TL;博士 您需要的不是一组整合的迁移;它是一个单独的模式文件和一个可选的seeds.rb文件。一般来说,Rails已经具备了您所需要的大部分功能,但下面描述的种子数据可能是一个例外

使用模式,而不是迁移 一般来说,您不应该维护大量迁移。相反,您应该定期清除迁移,并使用schema.rb或schema.sql(重新)创建数据库。委员会:

无需(而且容易出错)通过重播整个迁移历史来部署应用程序的新实例。将当前模式的描述加载到数据库中更简单、更快……因为模式转储是数据库模式的权威源,强烈建议您将其签入源代码管理

因此,您应该使用
bin/rails db:schema:load
,而不是运行迁移,或者在旧版本的rails上运行相关的Rake任务

数据迁移 虽然可以使用迁移来修复或删除与最近的架构更改相关的数据,但数据迁移(如果使用的话)应该是临时工件。数据迁移几乎从来都不是幂等的,因此您不应该长期维护数据迁移:

有些人使用迁移将数据添加到数据库中……但是,Rails有一个“种子”功能,应该用于在数据库中植入初始数据。这是一个非常简单的特性:只需用一些Ruby代码填充db/seeds.rb,然后运行rake db:seed…这通常是一种更干净的方法来设置空白应用程序的数据库


数据库种子数据应该使用
bin/rails db:seed
(或相关的Rake任务)加载,而不是在迁移中维护数据。

有一个gem,它声称完全按照您在问题中所描述的做-请查看

自述文件:
“Squasher压缩Rails应用程序中的旧迁移……Squasher删除所有迁移,并创建一个最终数据库状态为指定日期的迁移(新迁移看起来像架构)。”

请参阅。@Mohamad,这解决了错误的问题。Rails已经有了本地处理整合的机制。这是解决这种情况的更好、更优雅的方法。@Eltaf请发布更好、更优雅的方法是什么!非常感谢@CodeGnome。这清除了云。但是Heroku呢,它要求所有迁移文件都可用,而不管模式的当前状态如何?