Rails mysql2 undefined方法`accept'代表nil:NilClass

时间:2012-10-04 15:01:47

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

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

$ 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

6 个答案:

答案 0 :(得分:22)

Sean和Mitch的答案都有助于解决方案:

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

希望明确表示:

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

    gem'mysql2'

  2. gem list应输出以下行:
      

    activerecord-mysql2-adapter(0.0.3)

         

    mysql2(0.3.11)

  3. 编辑:

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

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

    我不得不重启rails服务器;并解决了这个问题。

答案 1 :(得分:13)

我记得我在修复错误时所采取的措施。

只需删除

  

activerecord-mysql2-adapter(0.0.3)

来自你的宝石文件!

希望能解决它!

干杯, 肖恩

答案 2 :(得分:1)

我不知道为什么但是当我添加gem“mysql2”,“> = 0.3.11”并且它有效。 我已经尝试过gem“mysql2”,“0.3.2”,但是没有用。无论如何,谢谢你。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

请将port: 3306添加到您的database.yml,并127.0.0.1代替localhost

答案 5 :(得分:0)

除了提到的早期解决方案:

  • 摆脱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)