Rails: поиск неверных исходников в gemfile. как исправить?

Предупреждение новичка...

Пытаясь решить проблему с моим сервером rails webrick (т.е. запустить его), я использовал старый ответ Stackoverflow старый ответ и выполнил следующую команду

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Однако я забыл изменить номера версий. Например, у меня mysql 0.3.6 (в отличие от 0.2.6 в команде), а также libmysqlclient.18 вместо .16.

Теперь, когда я пытаюсь запустить сервер rails, он говорит

Could not find gem 'mysql2 (~> 0.2.6)' in any of the gem sources listed in your Gemfile.

Я попытался повторно запустить эту команду с обновленными версиями, но это ничего не изменило... На самом деле, она даже не запрашивает мой пароль root... Есть идеи, как я могу решить эту проблему?

Обновить - это список драгоценных камней, созданных, когда я делаю gem list. Первый человек, ответивший на этот вопрос, предложил (в своих комментариях) удалить mysql .0.2.6, но этот гем так и не был установлен. Когда я выполнил команду name_tool, описанную выше, она приказала системе искать mysql 0.2.6, хотя я должен был указать искать mysql2-0.3.6.

abstract (1.0.0)
actionmailer (3.0.9, 3.0.7)
actionpack (3.0.9, 3.0.7)
activemodel (3.0.9, 3.0.7)
activerecord (3.0.9, 3.0.7)
activeresource (3.0.9, 3.0.7)
activesupport (3.0.9, 3.0.7)
arel (2.0.10)
builder (2.1.2)
bundler (1.0.14)
erubis (2.6.6)
i18n (0.5.0)
mail (2.2.19)
mime-types (1.16)
mysql2 (0.3.6)
polyglot (0.3.1)
rack (1.2.3)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.9, 3.0.7)
railties (3.0.9, 3.0.7)
rake (0.9.1)
rdoc (3.8)
rubygems-update (1.8.5)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27)

Обновление - после выполнения инструкций в ответе Эрика Ху я получил этот результат, когда запустил rails server из папки моего проекта.

2011-07-26 01:49:17 rails s
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2.rb:9
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler.rb:120:in `require'
    from /Users/michaelmitchell/Sites/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6

Обновление - я составил список пакетов, как предложил Эрик в своем комментарии.

Gems included by the bundle:
  * abstract (1.0.0)
  * actionmailer (3.0.9)
  * actionpack (3.0.9)
  * activemodel (3.0.9)
  * activerecord (3.0.9)
  * activeresource (3.0.9)
  * activesupport (3.0.9)
  * arel (2.0.10)
  * builder (2.1.2)
  * bundler (1.0.14)
  * erubis (2.6.6)
  * i18n (0.5.0)
  * mail (2.2.19)
  * mime-types (1.16)
  * mysql2 (0.2.11)
  * polyglot (0.3.1)
  * rack (1.2.3)
  * rack-mount (0.6.14)
  * rack-test (0.5.7)
  * rails (3.0.9)
  * railties (3.0.9)
  * rake (0.9.2)
  * rdoc (3.8)
  * thor (0.14.6)
  * treetop (1.4.9)
  * tzinfo (0.3.29)

person Leahcim    schedule 25.07.2011    source источник
comment
Я считаю, что @robert_rouse хотел, чтобы вы удалили гем mysql2, который у вас есть. Выполнить gem uninstall mysql2   -  person Eric Hu    schedule 26.07.2011
comment
хорошо, я удалил mysql2, а затем переустановил его, и у меня возникла та же проблема. Он по-прежнему ищет mysql2 (0.2.6), хотя mysql2 0.3.6 установлен. Не удалось найти gem 'mysql2 (~› 0.2.6)' ни в одном из источников gem, перечисленных в вашем Gemfile.   -  person Leahcim    schedule 26.07.2011
comment
вы устанавливаете с помощью gem install mysql2? Вы должны установить гемы проекта Rails с пакетной установкой (из корня папки вашего проекта), после того, как они были указаны в вашем Gemfile   -  person Eric Hu    schedule 26.07.2011
comment
Кажется, я только что установил gem install mysql2... Я новичок, извините. Я не понимаю остальной части вашего комментария   -  person Leahcim    schedule 26.07.2011


Ответы (2)


Я полагаю, что вы испытываете путаницу по поводу использования bundler и RubyGems. Когда вы gem install <gemname>, вы используете команды RubyGems для установки новейшей версии <gemname>.

Проекты Rails поставляются с гемом под названием bundler, который также управляет гемами. Bundler создает отдельную копию драгоценных камней для каждого проекта Rails, для которого вы создаете Gemfile. Если вы не помните, как создавали Gemfile, это потому, что это один из файлов, которые rails new <projectname> сгенерирует для вас.

Скорее всего, вы не запускали bundle install. Прежде чем вы это сделаете, перейдите в папку вашего текущего проекта Rails и откройте Gemfile, просто чтобы знать, что происходит. Держу пари, там есть вот такая строчка: gem 'mysql2', '~> 0.2.6'

Чтобы установить нужную версию, перейдите в папку вашего проекта в командной строке. Введите bundle install. Дайте ему минуту, и это должно быть все - попробуйте снова запустить rails s.

Если это кажется запутанным и ненужным, просто помните, что когда кто-то обновляет гем, он может изменить его таким образом, что это нарушит вашу программу. Bundler оказывает вам услугу, гарантируя, что ваша программа работает с определенными версиями необходимых гемов (в данном случае mysql2-0.2.6 вместо mysql2-0.3.6).

person Eric Hu    schedule 26.07.2011
comment
Я зашел в свою папку и сделал Gemfile и никакого результата. Затем я сделал пакетную установку, и он установил несколько вещей, но когда я запустил сервер rails после того, как он выдал мне сообщение об ошибке в самом последнем обновлении в моем OP - person Leahcim; 26.07.2011
comment
Под открытым Gemfile я имел в виду отредактировать его, просто чтобы взглянуть на него. Не могли бы вы обновить свой исходный пост с помощью bundle list, пожалуйста? Он будет искажен форматированием StackOverflow, если вы вставите его как комментарий. - person Eric Hu; 26.07.2011
comment
хорошо, я составил список пакетов и вставил результаты в ОП. - person Leahcim; 26.07.2011
comment
По-видимому, это общая проблема с MySQL и Rails - я использовал только PostgreSQL (и sqlite по умолчанию), поэтому я не сталкивался с проблемой. Однако это отличный пост в блоге, объясняющий, почему вы получаете сообщение об ошибке и что вам следует делать. Это короткое чтение, и я настоятельно рекомендую прочитать его. Это объясняет подход install_name_tool, который вы видели ранее, и почему это далеко не идеальное решение. - person Eric Hu; 26.07.2011
comment
извините за задержку, я был в путешествии. - person Leahcim; 30.07.2011

Очистите этот драгоценный камень и переустановите его.

Кроме того, RVM + Mac Homebrew для установки MySQL творит чудеса.

person Robert Rouse    schedule 25.07.2011
comment
спасибо, как мне очистить этот драгоценный камень. Я новичок... это просто uninstall_name_tool ? - person Leahcim; 25.07.2011
comment
Удалите гем и убедитесь, что файл /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 удален. - person Robert Rouse; 25.07.2011
comment
при всем уважении, я не думаю, что вы понимаете проблему. Драгоценный камень mysql2-0.2.6 не существует. Когда я сделал name_tool, описанный в OP, он сказал системе искать mysql2-0.2.6, но его не существует, поэтому я не могу его удалить. См. мой обновленный OP для списка установленных в настоящее время драгоценных камней... - person Leahcim; 26.07.2011