неинициализированная константа MysqlCompat :: MysqlRes (с использованием mms2r gem)
переместил мое приложение rails на новый сервер и должен был установить несколько зависимостей от gem. Однако после установки mysql gem я получаю ошибку, неинициализированную константу MysqlCompat :: MysqlRes, всякий раз, когда я пытаюсь запустить команду rake, которая включает в себя базу данных mysql. Кажется, я получаю эту ошибку только тогда, когда мне нужен камень mms2r. Кто-нибудь слышал об этом? Я запускаю mysql 2.8.1 gem.
- Миграции для Java
- Составные первичные ключи в сравнении с уникальным полем идентификатора объекта
- Как хранить данные на S3 и безопасный доступ пользователей к клиенту API / iOS с rails?
- Nokogiri «Не удалось создать родное расширение gem», когда я запускаю установку пакета
- Omniauth: обратный вызов не срабатывает, возвращает отказ с «недопустимыми учетными данными»
- Что такое scope / named_scope в рельсах?
- Адаптер Postgresql (pg): не удалось подключиться к серверу
- Установка солнечного пятна solr с рельсами в производственной среде
на моей Mac OS X 10.6 Я сделал это, чтобы установить 2.8.1 gem, который отлично работал с моим mysql5-сервером MacPorts:
sudo env ARCHFLAGS="-arch x86_64" gem install mysql
В основном проблема заключается в том, что динамическая библиотека libmysqlclient не может быть найдена. Вышеупомянутые решения будут работать, но вам нужно будет повторно их применять при каждом восстановлении драгоценного камня или при установке новой версии MySQL.
Альтернативный подход заключается в том, чтобы добавить каталог MySQL, содержащий библиотеку, в динамический путь загрузки. Помещение следующего в мой файл .bashrc решило проблему:
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
Моя проблема была связана с тем, что моя «mysql» была 32-разрядной установкой, а ruby - 64 и 32-разрядной. Проверьте эти команды
file `which mysql` file `which ruby`
Оба должны совпадать с 64-битным исполняемым файлом x86_64 Mach-O или 64-битным исполняемым файлом i386 от Mach-O. Я установил 64-разрядный mysql, затем
export ARCHFLAGS="-arch x86_64" ; sudo gem install --no-rdoc --no-ri mysql -v 2.7 -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/mysql/bin/mysql_config
и вуаля!
Если у вас есть mysql 5.5, выполните следующие действия: http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/
FTR: Если бы мне не нужна была какая-то глупая репутация, я бы поддержал идентификационный ответ, подумайте над этим моим преимуществом.
Да, я видел подобное сообщение об ошибке, ища тот же несуществующий class MysqlCompat :: MysqlRes
Как оказалось, этот class не должен существовать; сообщение об ошибке вызвано проблемой с последним драйвером Mysql. mysql-2.8.1 искал мои библиотеки в каталоге с дополнительным уровнем «mysql» в конце. Например, мои библиотеки (в MacOS X 10.5.8) находятся в / usr / local / mysql / lib, но библиотека mysql.bundle ищет библиотеки MySQL в / usr / local / mysql / lib / mysql … что неправильно.
Мне было достаточно легко исправить, создав символическую ссылку в / usr / local / mysql / lib с именем «mysql», которая указывает на «.».
Поэтому, когда библиотеки ссылаются на эту дополнительную глубину, они обнаруживаются и работают. Это, безусловно, взлом; Я уверен, что есть более подходящие способы исправить это. Мне просто нужно, чтобы он работал, чтобы я мог заниматься другими вещами.
Более того, это может не сработать для вас. Вероятно, это сработает, если ваша ошибка выглядит так:
./mysql.bundle: dlopen(./mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib (LoadError) Referenced from: /Users/ccullen/Projects/npapp-v2/mysql-ruby-2.8.1/mysql.bundle Reason: image not found - ./mysql.bundle from test.rb:5
Поскольку это, кажется, недавнее развитие, и я не видел никакого прямого ответа на него, я думал, что поделюсь тем, как я его исправил. Удачи 🙂
gem install -v = 2.7.1 также исправит это.
Установка правильных ARCHFLAGS при установке gem (re) помогла мне .. без каких-либо символических ссылок:
http://joergbattermann.tumblr.com/post/181479575/fixing-the-nameerror-uninitialized-constant
Эта проблема появилась со мной после обновления Ubuntu с 9.10 по 10.04.
Кажется, это проблема с камнем mysql.
Симптомы: Любое использование ActiveRecord, требующее подключения к mysql, дает трассировку стека из «неинициализированной константы MysqlCompat :: MysqlRes»
Я попробовал «gem update mysql» и обнаружил, что не могу создавать собственные расширения, потому что компилятор не может найти библиотеку mysql_client. Эта библиотека (libmysqlclient.so.16) находится в / usr / lib.
Исправить для ubuntu 10.04:
Как корень, я сделал это:
apt-get install libmysqlclient-dev gem install mysql
Я замечаю, что здесь есть несколько разных людей, и мне интересно, не нашли ли мы основную причину.
Переменные, которые люди должны уточнять в своих ответах:
- версия операционной системы – какая версия того, что вы используете?
- где и как вы установили mysql? – люди здесь, похоже, установили свой mysql из источника в / usr / local (я установил мой через систему упаковки ubuntu)
- вы на 64-битной ubuntu или 32-битной? (Я сейчас 32-разрядный).
С mysql gem (2.8.1) я получал
неинициализированная константа MysqlCompat :: MysqlRes
Использование -v 2.7 заставляет его работать отлично, а для тех, кто использовал Homebrew для установки mysql
sudo gem install mysql -v 2.7 – –with-mysql-config = / usr / local / Cellar / mysql / 5.1.48 / bin / mysql_config
Обратите внимание, что при необходимости вы можете изменить версию mysql.
sudo gem install mysql -v 2.7 должен делать трюк …
sudo gem install mysql -v 2.7 – –with-mysql-config = / usr / local / mysql / bin / mysql_config также сделал трюк для меня, когда перешел на новый ноутбук Snow Leopard. Я не использовал MacPorts для установки mysql, а скорее из двоичного кода, и не имел никакого успеха с решениями флагов или символическими ссылками.
Я пробовал все остальное здесь, но все еще проблема. Переход от MySQL 5.5 до 5.1 исправил его для меня. (Mac OS X 10.6.5)
Понижение рейтинга (с 5.9) до mysql 5.1 помогло на 10.6 … запустить как mysql, так и mysql2.
Драки mysql и mysql2 работают на ruby 1.9.2, просто обновляют ruby и устанавливают необходимый вам камень.
gem uninstall mysql gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config ldconfig /usr/local/mysql/lib/mysql RAILS_ENV=production rake db:migrate --trace
Это сработало для меня.
sudo apt-get install libmysqlclient15-dev
Я пробовал все вышеперечисленное, и никто из них не работает для меня. При попытке установить mysql версии 2.7 я получаю сообщение об ошибке:
sudo gem install -v=2.7.1 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config ERROR: could not find gem mysql locally or in a repository F107PHD:stepgreen.org tdillahu$ sudo gem install -v=2.7 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lz... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lsocket... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lnsl... no checking for mysql_query() in -lmysqlclient... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby --with-mysql-config --without-mysql-config --with-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysqlclientlib --without-mysqlclientlib --with-mlib --without-mlib --with-mysqlclientlib --without-mysqlclientlib --with-zlib --without-zlib --with-mysqlclientlib --without-mysqlclientlib --with-socketlib --without-socketlib --with-mysqlclientlib --without-mysqlclientlib --with-nsllib --without-nsllib --with-mysqlclientlib --without-mysqlclientlib Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.7 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.7/gem_make.out
Моя первоначальная ошибка: ake aborted! неинициализированная константа MysqlCompat :: MysqlRes /vendor/rails/activesupport/lib/active_support/dependencies.rb:440:in load_missing_constant' /vendor/rails/activesupport/lib/active_support/dependencies.rb:80:in
const_missing’
У меня была такая же проблема после обновления с Fedora 10 до Fedora 12. Я исправил ее, просто удалив gem mysql и установив его снова. Таким образом, он соответствует новой версии MySQL.
sudo gem install mysql -v 2.7 – –with-mysql-config = / usr / local / mysql / bin / mysql_config
Отлично работал для меня 🙂
В Mac OS X 10.6.4 мне пришлось указать каталог архитектуры и конфигурации:
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
Если ваша версия Mysql равна 5.5, ее следует удалить. Я просто оставил статью об использовании mysql с ruby: http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/
Это то, что сработало для меня. Я прочитал массу сообщений и обнаружил, что использование системы ruby install вызывает проблему несовместимости:
- не используйте стандартную rubyовую установку! установить ruby с помощью macports
- не используйте установку rubygems по умолчанию! установить rb-rubygems с помощью macports
- использовать mysql 5.1 (не 5.5) – установить с mysql.com mac .dmg
4.
sudo env ARCHFLAGS = “- arch x86_64” gem install mysql – –with-mysql-config = / usr / local / mysql / bin / mysql_config
sudo env ARCHFLAGS="-arch x86_64" gem install mysql
Dmg пакет с сайта mysql и ddone!
sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
также работал для меня, когда флагом и символическими ссылками не было! БЛАГОДАРЯ!!
Как зависимость mysql связана с mms2r? Я автор mms2r, кстати.
Параметры mms2r gemspec https://github.com/monde/mms2r/blob/master/mms2r.gemspec не отображают зависимость mysql.