mitch
mitch

Reputation: 2245

Rails mysql2 undefined method `accept' for nil:NilClass

I know that was a million times here but tried everything and I am still getting this error:

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

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

This is the gem list (not all):

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)

I have tried with all versions of mysql2 (from 0.2.7 to 0.3.2)

Edit (database file):

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

Upvotes: 13

Views: 12404

Answers (6)

Marcos
Marcos

Reputation: 4930

In addition to the earlier solutions mentioned:

  • Get rid of the gem activerecord-mysql2-adapter
  • Use gem mysql2 version 0.3.11 and above

It turned out there was simultaneously an older mysql2 gem installed, subtly throwing off my Rails app:

gem list
mysql2 (0.2.2, 0.3.17)

gem uninstall mysql --version=0.2.2 

Finally after that uninstall, my app launched free of this error:

/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` (can't activate mysql2 (~> 0.3.10), already activated mysql2-0.2.2. Make sure all dependencies are added to Gemfile.) (LoadError)

Upvotes: 0

Subhash
Subhash

Reputation: 3270

Both answers from Sean and Mitch contribute to the solution:

  • Version of mysql2 gem should be 0.3.11 and above, and
  • activerecord-mysql2-adapter should be removed from gemfile.

Wanted to make it clear that:

  1. Your gemfile should contain the following line (remove activerecord-mysql2-adapter alone):

    gem 'mysql2'

  2. gem list should output the following line:

    activerecord-mysql2-adapter (0.0.3)

    mysql2 (0.3.11)

Edit:

I also got the below error when I tried to open the index of a scaffold-generated model:

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

I had to restart the rails server; and that fixed the problem.

Upvotes: 23

Sean
Sean

Reputation: 2891

I just remembered what I did to fix the error when I had it.

Just remove

activerecord-mysql2-adapter (0.0.3)

from your gemfile!

Hopefully that fixes it!

Cheers, Sean

Upvotes: 13

duykhoa
duykhoa

Reputation: 2312

please add the port: 3306 to your database.yml, and 127.0.0.1 instead localhost

Upvotes: 0

duykhoa
duykhoa

Reputation: 2312

I suggest to change localhost to 127.0.0.1. Please show your model, maybe some fields is the keyword of mysql

Upvotes: 0

mitch
mitch

Reputation: 2245

I don't know why but when I add gem "mysql2", ">= 0.3.11" and it works. I have tried gem "mysql2", '0.3.2' and that was not working. Thank you anyway.

Upvotes: 2

Related Questions