'неопределенный метод init для Mysql: Class' - PullRequest
6 голосов
/ 28 декабря 2010

У меня были проблемы с установкой MySQL Server, которая испортилась после отключения питания.

Конфигурация

Intel i5 Mac под управлением OS X 10.6.5
Ruby 1.9.2 установлен
Rails 3.0.1 установлен
MySQL Server (окончательно) установлен и работает
Я полностью переустановил MySQL, который удалил локальные базы данных разработки / тестирования / производства.Итак, я запустил create database development; в MySQL, чтобы подготовить базу данных dev для миграции.

Текущая цель

  • Запустить rake db:migrate, чтобы снова вернуть мои базы данных.(В настоящее время я не могу получить доступ к своим базам данных или Mysql вообще из Rails.)

Ошибка

Используя gem 'mysql', '2.8.1' и запустить rake db:migrate, я получаю ошибку:

rake aborted!
undefined method 'init' for Mysql:Class

Трассировка стека:

/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/mysql_adapter.rb:30:in 'mysql_connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:230:in 'new_connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:238:in 'checkout_new_connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:194:in 'block (2 levels) in checkout'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in 'loop'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in 'block in checkout'
/Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in 'mon_synchronize'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in 'checkout'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in 'connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:318:in 'retrieve_connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:97:in 'retrieve_connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in 'connection'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:486:in 'initialize'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in 'new'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in 'up'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:415:in 'migrate'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/railties/databases.rake:142:in 'block (2 levels) in <top (required)>'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in 'call'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in 'block in execute'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in 'each'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in 'execute'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:597:in 'block in invoke_with_call_chain'
/Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in 'mon_synchronize'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:590:in 'invoke_with_call_chain'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:583:in 'invoke'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2051:in 'invoke_task'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'block (2 levels) in top_level'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'each'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'block in top_level'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in 'standard_exception_handling'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2023:in 'top_level'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2001:in 'block in run'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in 'standard_exception_handling'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1998:in 'run'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/bin/rake:31:in '<top (required)>'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in 'load'
/Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in '<main>'

Ответы [ 8 ]

4 голосов
/ 01 августа 2011

У меня есть Rails 3.1-rc4, MySQL 5.5.15 (только что обновленный) и Mac OS X Lion.Моя проблема оказалась в том, что файл mysql_api.bundle был связан с правильным файлом libmysqlclient.18.dylib, но не смог найти библиотеку:

otool -L ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle 
/Users/rowland/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle:
    /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

Во время выполнения библиотека не найдена.Моей первой попыткой исправить это было добавить команду LC_RPATH, но этого было недостаточно (возможно, потому что это было в конце списка).Вместо этого я напрямую изменил ссылку на библиотеку с помощью:

install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle

Теперь otool показывает мне:

otool -L ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle 
/Users/rowland/.rvm/gems/ruby-1.9.2-p180@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle:
    /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

, и все снова становится счастливым.Это работает только на Mac OS X.

3 голосов
/ 29 декабря 2010

То, что вы ищете, верно здесь .

Олуф Нильсен

2 голосов
/ 07 февраля 2012

Эта строка помогла мне избавиться от ошибки выше.В Mac OS X 10.7.Лев

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH" >> ~/.profile
1 голос
/ 05 января 2012

Я столкнулся с той же ошибкой, пытаясь заставить сайт rails работать на CentOS с использованием гема mysql-2.8.1.Я мог бы нормально запустить сайт, если бы я запустил его как root, но когда я переключился на пользователя моего приложения, он бы выдал эту ошибку.В конечном итоге это были разрешения на структуру каталогов mysql.Я запустил chmod -R 755 в каталоге mysql и перезапустил сервер rails, и ошибка исчезла.Ошибка немного расплывчата и, кажется, охватывает все, когда драйвер подключается к базе данных.

1 голос
/ 30 июня 2011

у меня не было другого решения, кроме:

brew install mysql-connector-c

sudo gem install mysql -- --with-mysql-lib=/usr/local/mysql/lib

ruby ​​mysql с собственными расширениями для Mac OSX

0 голосов
/ 14 мая 2012

Я получаю ту же ошибку, но я заменил gem с 'mysql' на 'mysql2', и это работает для меня. Поэтому я делюсь с вами людьми, если кто-то все еще получает такую ​​же ошибку

0 голосов
/ 06 октября 2011

Добавление к ответу Шона, который я смог использовать:

Моя установка - OS X Lion + apache + passenger + mysql, установленный через Homebrew.Когда я запускаю «сервер rails», мне нужно установить переменную DYLD_LIBRARY_PATH, но я не могу понять, как установить ее в apache.Я должен был сделать это:

cd /Library/Ruby/Gems/1.8/gems/mysql-2.8.1/lib
sudo install_name_tool -change libmysqlclient.18.dylib `brew --prefix mysql`/lib/libmysqlclient_r.18.dylib mysql_api.bundle

Тот же ответ, только специфичный для установки Homebrew, и мои драгоценные камни не были в ~ / .rvm / драгоценных камнях, как его были.

0 голосов
/ 08 марта 2011

Это сработало для меня на Ubuntu

export LD_LIBRARY_PATH=/usr/local/mysql/lib
ldconfig

Я просто поставил это в нижней части /etc/profile, и для любых новых входов в систему все работает отлично. Вы можете быстро протестировать его без повторного входа в систему, выполнив это

source /etc/profile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...