【问题标题】:Why is my rails db:migrate not working?为什么我的 rails db:migrate 不工作?
【发布时间】:2017-11-08 21:48:51
【问题描述】:

我输入rails db:migrate 并收到以下错误。我用谷歌搜索,有人说将迁移版本从 [4.2] 更改为 [5.1],但它仍然没有工作。

rails 数据库:迁移 导轨中止! StandardError:发生错误,此迁移和所有后续迁移已取消:

不支持直接从 ActiveRecord::Migration 继承。请指定迁移所针对的 Rails 版本:

类 CreateCkeditorAssets

【问题讨论】:

  • 你能粘贴完整的回溯吗?
  • 显示您的迁移。还有你的 Rails 版本是什么

标签: ruby-on-rails ruby-on-rails-5.1


【解决方案1】:

Rails 5 改变了创建迁移的方式。您必须像这样指定从 Rails 5 开始的 Rails 版本(假设您使用的是 Rails 5.1):

class CreateCkeditorAssets < ActiveRecord::Migration[5.1]

或者,您可以尝试创建一个测试迁移并查看您的 Rails 版本如何生成迁移,然后从那里获取它:

rails g model Test name:string

【讨论】:

  • 谢谢!在我发现我正在查看 ckeditor 文件夹中的文件而不是迁移文件之前,我无法解决此问题!
  • 括号内的值是您运行迁移的 Rails 版本,还是创建迁移的 Rails 版本?也就是说,如果我在 4.2 下编写了一个迁移并应用到 Rails 5 环境,我应该在大括号内使用 4.2 还是 5.1?
  • @PhilDD 应该是 4.2
  • 谢谢,我在安装和配置 Paperclip/ImageMagick 组合后出现了错误。我将我的 [5.1] 添加到相关迁移文件的第一行的末尾,如下所示... class AddAttachmentImageToPosts
【解决方案2】:

Aditya 已经写了答案,手动更改所有迁移是一项繁重的任务,所以我写了一个单行脚本来做到这一点

在 linux (Gnu sed) 中

grep -rl "ActiveRecord::Migration$" db | xargs sed -i 's/ActiveRecord::Migration/ActiveRecord::Migration[4.2]/g'

在 Mac 中(BSD sed)

grep -rl "ActiveRecord::Migration$" db | xargs sed -i "" "s/ActiveRecord::Migration/ActiveRecord::Migration[4.2]/g"

注意,您可以将 4.2 替换为您要升级到 5.1 的导轨

【讨论】:

  • ^ 这太棒了,为我节省了很多时间。
  • 我运行这个命令grep -rl "ActiveRecord::Migration$" db | xargs sed -i 's/ActiveRecord::Migration/ActiveRecord::Migration[5.2]/g',但它不起作用我得到这个输出sed: no input files
  • @Nency 哪个操作系统?
  • 在 macOS Mojave 上,提供的 BSD sed 脚本不起作用,请使用 Gnu sed 脚本。
  • 这真的可取吗?假设我从 4.2 更新。如果某些迁移是在 4.2 之前编写的,是否会导致问题?
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 2014-01-31
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多