ruby-on-rails - 使用 Ruby on Rails 处理失败迁移的最佳策略
问题描述
我希望你们一切都好。
我将我的一个旧项目(实时生产)从 Github 克隆到运行 Big Sur 的新 MacBook。我想开发新功能和更新,但我不断收到一些迁移错误。
据我所知,我们不应该删除任何迁移文件。那么修复这些错误的最佳实践是什么?
- 我应该删除、编辑导致问题的迁移文件吗?
- 我应该删除相关的 gem 以及迁移文件并重新安装吗?
- 还有什么建议吗?
谢谢!
% 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
解决方案
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:setup
会db:create
, db:schema:load
,db:seed
这在设置项目时很有用
推荐阅读
- php - 允许用户更改排序顺序
- python - 使用 Python Django 将用户配置文件系统与评论系统集成
- javascript - 当有生成的标签时,我如何进行网页抓取?
- python - 我可以在 Amazon Lambda 上使用 seccomp
- css - 在 chrome 中使用 rem 的字体大小
- python - 如何删除不和谐机器人在一段时间后发送的消息?(discord.py)
- websocket - F# | 如何在多线程场景下管理 WebSocketClient ReceiveAsync?
- html - 具有特定子元素属性的 CSS 选择元素
- javascript - Typescript 按键分组数组
- python - 检查字符串是否包含多于一种类型的字符