【问题标题】:Rails mysql2 undefined method `accept' for nil:NilClassRails mysql2未定义方法'accept'用于nil:NilClass
【发布时间】:2012-09-25 15:52:57
【问题描述】:

我知道这是一百万次,但尝试了一切,我仍然收到此错误:

$ rake db:migrate
rake aborted!
undefined method `accept' for nil:NilClass

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

这是宝石列表(不是全部):

activemodel (3.2.8)
activerecord (3.2.8)
activerecord-mysql2-adapter (0.0.3)
builder (3.1.3, 3.0.3)
bundler (1.2.1)
mysql2 (0.3.2)

rails (3.2.8)
rails_apps_composer (2.2.10)
railties (3.2.8)
rake (0.9.2.2)
rdoc (3.12)
sqlite3 (1.3.6)
therubyracer (0.10.2)
thor (0.16.0)
tilt (1.3.3)
treetop (1.4.10)
twitter-bootstrap-rails (2.1.3)
tzinfo (0.3.33)
uglifier (1.3.0)

我已经尝试过所有版本的 mysql2(从 0.2.7 到 0.3.2)

编辑(数据库文件):

development:
  adapter: mysql2
  database: tripwall
  username: root
  password: pass
  host: localhost
  pool: 5
  timeout: 5000

【问题讨论】:

  • 能否包含您的 database.yml 文件?
  • 你试过了吗:bundle update activerecord-jdbc-adapter 和 bundle update mysql2

标签: mysql ruby ruby-on-rails-3 rake migrate


【解决方案1】:

肖恩和米奇的两个答案都有助于解决方案:

  • mysql2 gem的版本应为0.3.11及以上,且
  • activerecord-mysql2-adapter 应该从 gemfile 中移除。

想明确一点:

  1. 您的 gemfile 应该包含以下行(单独删除 activerecord-mysql2-adapter):

    gem 'mysql2'

  2. gem list 应输出以下行:

    activerecord-mysql2-adapter (0.0.3)

    mysql2 (0.3.11)

编辑:

当我尝试打开脚手架生成的模型的索引时,我也遇到了以下错误:

NoMethodError (undefined method `accept' for nil:NilClass):
app/controllers/posts_controller.rb:5:in `index'

我不得不重新启动 rails 服务器;这样就解决了问题。

【讨论】:

    【解决方案2】:

    我只记得当我遇到错误时我做了什么来修复错误。

    只需删除

    activerecord-mysql2-adapter (0.0.3)

    来自您的 gemfile!

    希望能修复它!

    干杯, 肖恩

    【讨论】:

    • 请安装 mysql2 适配器:gem install activerecord-mysql2-adapter(mysql2 不是捆绑包的一部分。将其添加到 Gemfile。)
    • 这是在捆绑更新mysql到最新版本(0.3.11)之后?
    • 我没有更新。我刚刚安装了新版本(这台电脑之前没有rails - OSX)
    • 花了我 小时 - 谢谢你的回答!
    【解决方案3】:

    我不知道为什么,但是当我添加 gem "mysql2", ">= 0.3.11" 并且它起作用了。 我已经尝试过 gem "mysql2", '0.3.2' 并且没有用。还是谢谢你。

    【讨论】:

    • 很高兴你修复了它,这只是一个 gem 版本控制问题。所以你知道,0.3.2 是 0.3 的第二个版本,0.3.11 是第十一个。
    【解决方案4】:

    我建议更改localhost to 127.0.0.1。请显示您的模型,可能某些字段是mysql的关键字

    【讨论】:

    • 我有一个表“用户”,其中一个字段是“名称”;)
    • 哦,我怕mysql中有些字段是反向词;但在这种情况下,这不是问题:)
    【解决方案5】:

    请将port: 3306 添加到您的database.yml,并添加127.0.0.1 而不是localhost

    【讨论】:

      【解决方案6】:

      除了前面提到的解决方案:

      • 摆脱 gem activerecord-mysql2-adapter
      • 使用gem mysql2 0.3.11及以上版本

      原来同时安装了一个较旧的 mysql2 gem,巧妙地抛弃了我的 Rails 应用程序:

      gem list
      mysql2 (0.2.2, 0.3.17)
      
      gem uninstall mysql --version=0.2.2 
      

      最后卸载后,我的应用启动时没有出现这个错误:

      /home/master/.rbenv/versions/2.5.6/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:408:in block (2 levels) in replace_gem': Please install the mysql2 adapter: gem install activerecord-mysql2-adapter` (无法激活mysql2(~> 0.3.10),已经激活了mysql2-0.2.2。确保将所有依赖项添加到 Gemfile。)(LoadError)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-24
        • 2013-07-16
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 2016-04-27
        相关资源
        最近更新 更多