Ruby on rails 删除Rails应用程序中的旧迁移文件

Ruby on rails 删除Rails应用程序中的旧迁移文件,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,如果模式稳定,是否允许在Rails应用程序中删除(或归档)旧迁移文件 我的迁移次数很多,我怀疑在某个地方可能有问题,因为我偶尔会在Heroku上迁移数据库时遇到问题。您不需要在Rails应用程序中保留旧的迁移文件,因为您的数据库模式应该在schema.rb或可用于重新生成模式的等效SQL文件中捕获 迁移不是数据库架构的权威源。该角色属于db/schema.rb或Active Record通过检查数据库生成的SQL文件。它们不是为编辑而设计的,它们只是表示数据库的当前状态 无需(而且容易出错)通过

如果模式稳定,是否允许在Rails应用程序中删除(或归档)旧迁移文件


我的迁移次数很多,我怀疑在某个地方可能有问题,因为我偶尔会在Heroku上迁移数据库时遇到问题。

您不需要在Rails应用程序中保留旧的迁移文件,因为您的数据库模式应该在schema.rb或可用于重新生成模式的等效SQL文件中捕获

迁移不是数据库架构的权威源。该角色属于db/schema.rb或Active Record通过检查数据库生成的SQL文件。它们不是为编辑而设计的,它们只是表示数据库的当前状态

无需(而且容易出错)通过重播整个迁移历史来部署应用程序的新实例。只需将当前模式的描述加载到数据库中(位于schema.rb或SQL文件中)就可以更简单、更快地完成操作。
此文件应进行版本控制并保存在源代码管理中

要设置schema.rb自动生成,请通过
config.active\u record.schema\u format
设置修改config/application.rb,该设置可以是:ruby或:sql。 如果选择:ruby,则模式存储在db/schema.rb中。 如果选择:sql,则将以的本机sql格式转储模式
您的数据库。

您可以删除旧迁移。完成此操作后,在设置应用程序时,您需要运行:

rake db:schema:load
而不是:

rake db:migrate

下面是我所做的,我发现了在生产环境下迁移的最后一个版本
ActiveRecord::SchemaMigration.last.version
,并在源代码中删除了之前的所有迁移


这不是最好的方法,但我确实
找到了db/migrate-type f
,复制了上一个版本之前的文件列表和
pbpaste | rm
(macos)。

这绝对正确。一个警告:迁移可以用来影响数据库的内容,而不是结构。例如,您可能有转换数据的SQL(可能是规范化、转换为小写或大写等)。另一个用途是一些清理任务(删除旧记录、纠正创建数据时的早期逻辑错误等)。最后,应该在
seeds.db中完成的工作有时会在迁移中完成。迁移的这种使用是否正确是另一个问题——请注意,您应该小心。如何处理旧的迁移文件?简单地删除它们是不对的。我不同意上面的@TomHarrisonJr,因为这些事情“有时应该在迁移中完成”——这些SQL约束、触发器、存储过程等不应该依赖于迁移文件。相反,
config.active\u record.schema\u format
应该是
:sql
,或者,重写
rake:db:setup
任务以运行定义此类内容的后续sql命令(活动记录/schema.rb不能)。我完全同意上面所说的一切:)。可能是重复的