Назад | Перейти на главную страницу

Проблема RubyGem с mysql

Я немного сбит с толку ... У меня на сервере работает Rails 2.3.2 после обновления с 2.1.1. Я получаю следующую ошибку на моих беспородных кластерах, когда они пытаются запустить:

Exception `Gem::LoadError' at /usr/lib/ruby/site_ruby/1.8/rubygems.rb:578 - Could not find RubyGem activerecord-mysql-adapter (>= 0)

Чем это вызвано? Я сделал:

gem install mysql

... со всей разнообразной магией, зависящей от пути, для его установки. Поиск в Google обнаруживает похожие проблемы, но без видимого решения. Любые идеи?

Больше информации:

Версии: Rails 2.3.2 (через gem), RubyGems 1.3.4 (через gem), Ruby 1.8.5 (через yum), Linux 2.6.18-xen (CentOS 5.2).

Адаптер MySQL (gem install mysql) составляет 2,7.

Странно то, что если я удалю адаптер mysql (gem uninstall mysql) Я ожидал, что он вернется к встроенному (хотя и медленному ...?) Адаптеру MySQL. Он не действует иначе.

Основной причиной этого является особенность Rails 2.3, позволяющая внешним гемам предоставлять адаптеры подключения, а не объединять их все вместе. Кровавые подробности в activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb если вам интересно, но в целом и вкратце: первое, что install_connection попытается сделать, - это загрузить драгоценный камень, и если это не сможет выполнить «традиционное» требование (которое загрузит встроенный mysql адаптер).

Сигнализация "неудачи" осуществляется путем повышения LoadError, и вот тут все начинает раздражать. У Rubygems есть своя собственная LoadError класс (Gem::LoadError) и я считать здесь и возникает проблема, поскольку activerecord неправильно определяет, что произошел (ожидаемый) сбой, и поэтому взрывается, а не просто пытается загрузить адаптер подключения локально.

Bodgy back, о котором вы, вероятно, пожалеете в будущем, - это изменить activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb строка 72 к:

rescue LoadError, Gem::LoadError

Правильный способ исправить это - выяснить, что пошло не так в вашей среде, что вызвало это (поскольку это, очевидно, не для всех). Мои первые предположения заключаются в том, что вы используете старую версию RubyGems (например, строка 578 rubygems.rb в версии 1.3.3 не имеет ничего общего с ошибками загрузки) или странную (возможно, устаревшую) версия Ruby. Я бы удостоверился, что вы используете последнюю версию Rubygems (Rails 2.3 требует, по крайней мере, 1.3.1 для правильной работы, что, я думаю, может быть тем, что вы делаете), и что ваша версия Ruby не тоже там (используйте 1.8.6 или 1.8.7, и я бы с осторожностью использовал 1.9 в вашей ситуации).

Если у вас все работает нормально, но проблема не устранена, предоставьте полную и исчерпывающую информацию о вашей системе (ОС, дистрибутив, источник Ruby / rubygems (пакет, из источника и т. Д.), Версии всего вышеперечисленного, любые настройки) и кто-то может решить проблему на земле. В настоящее время вы не предоставили никакой информации, которая могла бы помочь кому-либо отследить проблему.