【问题标题】:Unable to run ActiveRecord Migration无法运行 ActiveRecord 迁移
【发布时间】:2017-11-29 12:46:55
【问题描述】:

我添加了 gemfile:

gem 'activerecord-reputation-system', require: 'reputation_system'

到我的 Rails 应用程序,以便为模型添加赞成/反对票功能(我正在关注 Railscast #364)。我安装 gem 没有问题。

我输入了“rails g 信誉系统”并 rake db:migrate,但 rake 被中止:

Gem::LoadError: You have already activated rake 12.3.0, but your 
Gemfile requires rake 12.0.0. Prepending `bundle exec` to your command 
may solve this.

我用 'bundle exec' 尝试过,但 rake 再次中止:

StandardError: An error has occurred, this and all later migrations 
canceled:

Directly inheriting from ActiveRecord::Migration is not supported. 
Please specify the Rails release the migration was written for:

我更新了我的 gem,看看这是否是问题所在,但这并没有什么不同。

除了找到删除 rake 12.3.0 和安装 12.0.0 的方法之外,我想不出其他任何办法,但这似乎不合逻辑。

任何帮助将不胜感激,谢谢:-)

【问题讨论】:

    标签: ruby-on-rails activerecord rubygems rake bundler


    【解决方案1】:

    在 Rails 5 中,迁移要求您在迁移文件的顶部指定您正在使用的 Rails 版本(为迁移指定),如错误所示。

    看起来像这样:

    class CreateYourModels < ActiveRecord::Migration[5.1]
     ...your migration code
    end
    

    括号中的位是您正在使用的 Rails 版本。

    然后尝试运行bundle exec rake db:migrate

    补充说明:https://blog.bigbinary.com/2016/03/01/migrations-are-versioned-in-rails-5.html

    【讨论】:

    • 这篇文章告诉我,Rails 版本是在生成的迁移中指定的,但并没有表明任何不同的终端命令。还是我缺少什么?
    • 这是一个很好的问题,我之前也遇到过。终端命令没有区别,但我会深入研究为什么会出现这种情况并回复你。顺便说一句,您的 gem 文件中的 rails 版本是什么?同时,在您的迁移文件中尝试更新后的代码,让我知道它是否有效。
    • 哦,我想我明白你的意思了 - 更新迁移文件,然后迁移它们。我试试看……
    • gem 'rails', '~> 5.1.2'
    • 是的,很抱歉不清楚。我还注意到我打错了文件的顶部。相应地进行了编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多