【问题标题】:Undefined method `accept' for nil:NilClass on rake db:migraterake db:migrate 上 nil:NilClass 的未定义方法“接受”
【发布时间】:2025-12-24 07:15:10
【问题描述】:

使用 ruby​​-1.9.2 和 rails 3.2.1。 mysql2的版本是0.2.7。

运行 rake db:migrate 时出现错误: "nil:NilClass 的未定义方法 `accept':"

跟踪包括:

gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'

【问题讨论】:

  • 您是否曾经成功完成过 rake db:migrate,或者这是全新安装?其他 rake 命令是否有效?
  • 嗨,Marc,这是全新安装 - 升级到 10.7 Mac OS X。Rake db:create 工作正常。
  • @vectran 你解决了这个问题吗?我现在面临同样的问题。

标签: ruby-on-rails ruby mysql2


【解决方案1】:

好的,我修好了我的机器。这是因为较旧的 MySQL2。这样做可以解决问题。

bundle update mysql2

        Or

bundle update

更多详情请访问Github

【讨论】:

    【解决方案2】:

    如果在你的 database.yaml 文件中,你会得到这个:

    dev:
      adapter: mysql2
    

    应该是(即使你使用的gem是mysql2):

    dev:
      adapter: mysql
    

    我花了一个多星期才弄清楚这一点,希望它能节省你一些时间。

    【讨论】:

      【解决方案3】:

      对我来说,删除 宝石'activerecord-mysql2-适配器' 从 Gem File 解决

      【讨论】:

      • 从 Rails 3.0.3 升级到 Rails 3.2.8 时为我工作
      • 那药治好了我的病
      【解决方案4】:

      安装最新的mysql2 ruby​​ gem。 我的环境:

      Rails3.2.9 + mysql2 0.2.9,  : "undefined method `accept' for nil:NilClass:"
      Rails3.2.9 + mysql2 0.3.11, works fine
      

      【讨论】:

        【解决方案5】:

        将您的 Gemfile 更改为:

        gem 'activerecord-mysql2-adapter'
        

        到:

        gem 'mysql2'
        

        【讨论】:

        • 为什么会这样?
        • 一年多后还在解决问题!
        【解决方案6】:

        定义:

        def nil.accept
          puts "Accepted."
        end
        

        错误就会消失。

        【讨论】:

        • 搞笑,希望不会有太多人落入陷阱。在问答帮助网站中可能不会受到好评
        【解决方案7】:

        这可能是因为您的mysqlruby 版本不兼容。

        要解决此问题,请通过gem install mysql 更新您的 mysql gem,这将安装最新的 mysql gem。

        然后将其添加到您的Gemfile

        如果问题仍然存在,那么你应该看到你的 ruby​​ 和 mysql 之间的兼容性

        【讨论】: