Rails mysql2 undefined метод `accept 'для nil: NilClass

Я знаю, что здесь миллион раз, но все пробовал, и я все еще получаю эту ошибку:

$ 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

Ответ 1

Оба ответа от Шона и Митча вносят свой вклад в решение:

  • Версия mysql2 gem должна быть 0,3.11 и выше и
  • activeerecord-mysql2-адаптер должен быть удален из gemfile.

Хотелось бы пояснить, что:

  • Ваш gemfile должен содержать следующую строку (удалите только activerecord-mysql2-adapter):

    gem 'mysql2'

  • gem list должна выводиться следующая строка:

    activerecord-mysql2-adapter (0.0.3)

    mysql2 (0.3.11)

Edit:

Я также получил следующую ошибку, когда попытался открыть индекс модели, созданной с помошью:

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

Мне пришлось перезапустить сервер rails; и это устранило проблему.

Ответ 2

Я только что вспомнил, что я сделал, чтобы исправить ошибку, когда у меня было это.

Просто удалите

activerecord-mysql2-adapter (0.0.3)

из вашего gemfile!

Надеюсь, что это исправляет!

Cheers, Шон

Ответ 3

Я не знаю, почему, но когда добавляю gem "mysql2", " >= 0.3.11", и он работает. Я пробовал gem "mysql2", "0.3.2", и это не сработало. В любом случае, спасибо.

Ответ 4

Я предлагаю изменить localhost to 127.0.0.1. Пожалуйста, покажите свою модель, возможно, некоторые поля являются ключевым словом mysql

Ответ 5

добавьте port: 3306 к вашей базе данных .yml и 127.0.0.1 вместо localhost

Ответ 6

В дополнение к ранее упомянутым решениям:

  • Избавьтесь от гема activerecord-mysql2-adapter
  • Используйте gem mysql2 версии 0.3.11 и выше

Оказалось, что одновременно был установлен более старый гем mysql2, тонко отбрасывающий мое приложение на 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' (can't activate mysql2 (~> 0.3.10), already activated mysql2-0.2.2. Make sure all dependencies are added to Gemfile.) (LoadError)