为什么我的rails db:migrate无法正常工作?

jos*_*aka 25 ruby-on-rails ruby-on-rails-5.1

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

rails db:migrate rails aborted!StandardError:发生错误,此以及所有后续迁移都已取消:

不支持直接继承ActiveRecord :: Migration.请指定为以下内容编写的Rails版本:

class CreateCkeditorAssets <ActiveRecord :: Migration [4.2]

Tac*_*ons 43

Aditya已经写了答案,手动更改所有迁移是一项忙乱的任务,所以我写了一个单行程脚本来做那个

在linux(Gnu sed)

grep -rl "ActiveRecord::Migration$" db | xargs sed -i 's/ActiveRecord::Migration/ActiveRecord::Migration[4.2]/g'
Run Code Online (Sandbox Code Playgroud)

在Mac(BSD sed)

grep -rl "ActiveRecord::Migration$" db | xargs sed -i "" "s/ActiveRecord::Migration/ActiveRecord::Migration[4.2]/g"
Run Code Online (Sandbox Code Playgroud)

请注意,您可以4.2使用要升级到5.1的导轨进行替换

  • ^这太棒了,给了我很多时间. (3认同)
  • 我运行此命令`grep -rl“ ActiveRecord :: Migration $” db | xargs sed -i's / ActiveRecord :: Migration / ActiveRecord :: Migration [5.2] / g'`但不起作用,我正在得到此输出`sed:没有输入文件` (2认同)

Adi*_*tya 36

Rails 5改变了创建迁移的方式.你必须像这样指定Rails版本Rails 5(假设你正在使用Rails 5.1):

class CreateCkeditorAssets < ActiveRecord::Migration[5.1]
Run Code Online (Sandbox Code Playgroud)

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

rails g model Test name:string
Run Code Online (Sandbox Code Playgroud)