Установка mysql2 gem на Mac с RVM — настоящая боль

#mysql #ruby-on-rails-3 #macos #installation #mysql2

#mysql #ruby-on-rails-3 #macos #установка #mysql2

Вопрос:

Шаг 1:—

     rails s/usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2.rb:8:in `require': dlopen(/usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
    Referenced from: /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle
    Reason: image not found - /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2.rb:8:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:68:in `require'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:66:in `each'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:66:in `block in require'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:55:in `each'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:55:in `require'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler.rb:120:in `require'
    from /Users/mohit/projects/lbs_admin/config/application.rb:7:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:28:in `block in <top (required)>'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:27:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
  

ШАГ 2:—

  sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql-5.5.9-osx10.6-x86_64/lib/libmysqlclient.16.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle
  

Результат:—

     rails sWARNING: This version of mysql2 (0.3.2) doesn't ship with the ActiveRecord adapter bundled anymore as it's now part of Rails 3.1
    WARNING: Please use the 0.2.x releases if you plan on using it in Rails <= 3.0.x
    => Booting WEBrick
    => Rails 3.0.3 application starting in development on http://0.0.0.0:3000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    Exiting
    /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:71:in `rescue in establish_connection': Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (no such file to load -- active_record/connection_adapters/mysql2_adapter) (RuntimeError)
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:68:in `establish_connection'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:60:in `establish_connection'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:55:in `establish_connection'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/railtie.rb:59:in `block (2 levels) in <class:Railtie>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.3/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.3/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.3/lib/active_support/lazy_load_hooks.rb:43:in `block in run_load_hooks'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.3/lib/active_support/lazy_load_hooks.rb:42:in `each'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.3/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.3/lib/active_record/base.rb:1891:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/will_paginate-3.0.pre2/lib/will_paginate/finders/active_record.rb:31:in `enable!'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/will_paginate-3.0.pre2/lib/will_paginate/railtie.rb:9:in `block in <class:Railtie>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/initializable.rb:25:in `instance_exec'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/initializable.rb:25:in `run'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/initializable.rb:50:in `block in run_initializers'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/initializable.rb:49:in `each'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/initializable.rb:49:in `run_initializers'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/application.rb:134:in `initialize!'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
        from /Users/mohit/projects/lbs_admin/config/environment.rb:5:in `<top (required)>'
        from /Users/mohit/projects/lbs_admin/config.ru:3:in `require'
        from /Users/mohit/projects/lbs_admin/config.ru:3:in `block in <main>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/builder.rb:46:in `instance_eval'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/builder.rb:46:in `initialize'
        from /Users/mohit/projects/lbs_admin/config.ru:1:in `new'
        from /Users/mohit/projects/lbs_admin/config.ru:1:in `<main>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/builder.rb:35:in `eval'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/builder.rb:35:in `parse_file'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:162:in `app'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:248:in `wrapped_app'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:213:in `start'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands/server.rb:65:in `start'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:30:in `block in <top (required)>'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
        from /usr/local/rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.3/lib/rails/commands.rb:27:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
  

Шаг 3:—

 sudo gem uninstall mysql2
sudo env ARCHFLAGS="-arch i386" gem install mysql2 -- --with-mysql-config=/usr/local/mysql-5.5.9-osx10.6-x86_64/bin/mysql_config
  

Текущее состояние:—

ruby -v

 ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
  

rails -v

Rails 3.0.3

список драгоценных камней

 *** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.7, 3.0.3)
actionpack (3.0.7, 3.0.3)
activemodel (3.0.7, 3.0.3)
activerecord (3.0.7, 3.0.3)
activeresource (3.0.7, 3.0.3)
activesupport (3.0.7, 3.0.3)
annotate-models (1.0.4)
arel (2.0.9)
builder (2.1.2)
bundler (1.0.12)
erubis (2.6.6)
i18n (0.5.0)
mail (2.2.19)
mime-types (1.16)
mysql2 (0.3.2)
polyglot (0.3.1)
rack (1.2.2)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.7, 3.0.3)
railties (3.0.7, 3.0.3)
rake (0.8.7)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27)
web-app-theme (0.6.3)
will_paginate (3.0.pre2)
  

найдите mysql_config

 /usr/local/mysql-5.5.9-osx10.6-x86_64/bin/mysql_config
/usr/local/mysql-5.5.9-osx10.6-x86_64/man/man1/mysql_config.1
  

пакет показывает mysql2

  /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2
  

найдите libmysqlclient.16.dylib

 /usr/local/mysql-5.5.9-osx10.6-x86_64/lib/libmysqlclient.16.dylib
  

Как я могу продолжить?

Комментарии:

1. Это настоящая проблема в большинстве операционных систем, поскольку для этого требуются собственные привязки. Я мечтаю о том дне, когда у нас будет чистая реализация драйвера на ruby :(. Я должен добавить, что я не смог создать gem с Mysql 5.5, но он работал с mysql 5.1. Я постараюсь вспомнить, что я сделал.

Ответ №1:

У меня проблема sam. То, что я сделал, делает;

 gem install --version '0.2.7' mysql2
  

Затем в GemFile вашего Rails. Должно выглядеть примерно так.

 gem 'mysql2', '0.2.7'
  

Затем повторите попытку. Надеюсь, это поможет.

Комментарии:

1. Это тоже должно сработать, только сейчас заметил это. Хотя мое (обновленное) решение с использованием "~> 0.2" немного лучше, потому что оно освобождает bundler для использования других версий исправления ошибок 0.2, если они доступны.

2. Я думаю, вы имеете в виду «~> 0.2.7». OTOH, «~> 0.2» допускает что-либо меньшее, чем 1.0. Смотрите Ограничение на пессимистичную версию .

3. чувак, я потратил 3 часа, прежде чем нашел этот пост. Они должны очистить этот gem

Ответ №2:

Ваш stacktrace после шага 2 подсказал вам, что делать:

Пожалуйста, установите адаптер mysql2: gem install activerecord-mysql2-adapter

Обновить

Кроме того, обновите Rails до версии 3.0.7 — в 3.0.3 есть ряд дыр в безопасности (и багов).

Обновить

Похоже, что сообщение об ошибке от Rails неверно, оно должно было гласить:

Пожалуйста, используйте версии 0.2.x, если вы планируете использовать его в Rails <= 3.1

Ie. для всего, что меньше 3.1, вам нужно привязать mysql2 к версии 0.2 и не разрешать ему использовать 0.3. Для этого измените строку mysql2 в вашем Gemfile на эту:

 gem "mysql2", "~> 0.2"
  

Затем повторно запустите bundle install

Комментарии:

1. Уже сделал .. 🙂 Я потратил впустую весь свой день, чувак .. и вот, наконец, вы вернулись к 1.8.7 с rails 3.0.7

2. Кстати, возврат к версии 1.8.7, вероятно, просто означает, что вы вернулись к версии 0.2.x. Ie для mysql2. Я не думаю, что это проблема 1.9.2 v. 1.8.7 (потому что я могу воспроизвести здесь с 1.8.7)

3. Отлично работает на @ruby1.8.7 и mysql 0.3.2 и rails 3.0.7. Но, безусловно, ваша точка зрения верна. Но я не могу с этим возиться, поскольку нахожусь в середине очень важного проекта. Но обязательно попробую, как только все закончится.

Ответ №3:

доработка rails: эта версия mysql2 (0.3.2) больше не поставляется с адаптером ActiveRecord в комплекте, поскольку теперь она является частью Rails 3.1 ПРЕДУПРЕЖДЕНИЕ: Пожалуйста, используйте версии 0.2.x, если вы планируете использовать ее в Rails <= 3.0.x

Версия MySQL ‘0.2.7’ решила мою проблему.

  gem 'mysql2', '0.2.7'
  

Ответ №4:

Попробуйте это (но я ничего не могу гарантировать)

  • Проверьте этот пост о том, как
    • удалите MySQL 5.5.
    • установите MySQL 5.1 (я думаю, что я скачал 32-битную версию DMG)
  • Следуйте этому сообщению, чтобы создать GEM.

Надеюсь, после этого все заработает. Я скрещу пальцы за вас.

Комментарии:

1. Я тоже использую RVM, эти инструкции должны сработать. Я говорю «должен», потому что я установил его на свой персональный компьютер, и я не на работе, поэтому я не могу проверить некоторые вещи (например, какую именно версию mysql я скачал, хотя я помню, что это была 5.1.X). Просто любопытство, как вы думаете, какая часть не работает с RVM?

2. @Augusto О нет… Он использует mysql. Я уже использую mysql2 для множества своих проектов. Все серверы работают под управлением msql2

3. Извините за это. Я проверю сегодня вечером, что, если бы я скомпилировал mysql2, следуя тем же инструкциям, поскольку параметры для сборки обоих gem довольно схожи.

Ответ №5:

Вышеупомянутая проблема возникает в настоящее время в Engineeryard App Cloud с Ruby 1.9.2 и Rails 3.0.3. Используя mysql 2.8.1 barfs b / c, EY устанавливает адаптер mysql2. Использование mysql2 0.3.2 barfs. Итак, я был серьезно озадачен. Подкрепляет ответ Ричарда Сутара. Это сработало.