首页 > 解决方案 > 使用 Ruby on Rails 处理失败迁移的最佳策略

问题描述

我希望你们一切都好。

我将我的一个旧项目(实时生产)从 Github 克隆到运行 Big Sur 的新 MacBook。我想开发新功能和更新,但我不断收到一些迁移错误。

据我所知,我们不应该删除任何迁移文件。那么修复这些错误的最佳实践是什么?

谢谢!

  % bin/rails db:migrate RAILS_ENV=development
    ** Invoke db:migrate (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Invoke db:load_config (first_time)
    ** Execute db:load_config
    ** Execute db:migrate
    == 20171118122416 AddTaggingsCounterCacheToTags: migrating ====================
    -- add_column(:tags, :taggings_count, :integer, {:default=>0})
       -> 0.0521s
    rails aborted!
    StandardError: An error has occurred, this and all later migrations canceled:
    
    uninitialized constant AddTaggingsCounterCacheToTags::ActsAsTaggableOn

标签: ruby-on-railsrubypostgresqlrubygemsmigration

解决方案


bin/rails db:schema:load不,您不应该删除迁移,根据 rails 自己的建议,在已经存在迁移的旧项目上创建新数据库时,您可能最好运行

https://github.com/rails/rails/blob/main/actionmailbox/test/dummy/db/schema.rb#L5-L9

该文件是 Rails 在运行时用于定义模式的源文件bin/rails db:schema:load。与从头开始运行所有迁移相比,创建新数据库时bin/rails db:schema:load往往更快,并且可能更不容易出错。如果这些迁移使用外部依赖项或应用程序代码,旧迁移可能无法正确应用。

请注意,railsdb:setupdb:create, db:schema:loaddb:seed这在设置项目时很有用


推荐阅读