【发布时间】:2025-12-14 21:15:02
【问题描述】:
如果架构稳定,是否允许删除(或归档)Rails 应用程序中的旧迁移文件?
我的迁移很多,我怀疑那里可能存在一些问题,因为我偶尔会在 Heroku 上迁移数据库时遇到问题。
【问题讨论】:
标签: ruby-on-rails rails-migrations
如果架构稳定,是否允许删除(或归档)Rails 应用程序中的旧迁移文件?
我的迁移很多,我怀疑那里可能存在一些问题,因为我偶尔会在 Heroku 上迁移数据库时遇到问题。
【问题讨论】:
标签: ruby-on-rails rails-migrations
您无需在 Rails 应用程序中保留旧的迁移文件,因为您的数据库架构应该在 schema.rb 或可用于重新生成架构的等效 SQL 文件中捕获。
迁移不是您的数据库架构的权威来源。该角色属于 db/schema.rb 或 Active Record 通过检查数据库生成的 SQL 文件。它们不是为编辑而设计的,它们只是代表数据库的当前状态。
无需(而且容易出错)通过回放整个迁移历史来部署应用的新实例。将当前模式的描述加载到数据库中会更简单、更快捷,该描述位于 schema.rb 或 SQL 文件中。
此文件应进行版本控制并保存在源代码管理中。
要设置自动生成 schema.rb,请通过 config.active_record.schema_format 设置修改 config/application.rb,它可以是 :ruby 或 :sql。
如果选择了 :ruby,则模式存储在 db/schema.rb 中。
如果选择 :sql,则模式将以原生 SQL 格式转储
你的数据库。
【讨论】:
seeds.db 中完成的事情有时会在迁移中完成。这种迁移的使用是否正确是另一个问题——只是要注意你应该小心。
config.active_record.schema_format 应该是:sql,OR,覆盖rake:db:setup 任务以运行定义这些事情的后续 SQL 命令(活动记录/schema.rb 不能)。我同意其他所说的一切:)。
您可以删除旧的迁移。完成此操作后,在设置应用程序时,您需要运行:
rake db:schema:load
代替:
rake db:migrate
【讨论】:
这就是我所做的,我发现在生产ActiveRecord::SchemaMigration.last.version 上迁移的最后一个版本并在我的源代码中删除了之前的所有迁移。
不是最好的方法,但我做了find db/migrate -type f,复制了最后一个版本之前的文件列表和pbpaste | rm(macos)。
【讨论】: