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)