Обновление Snow Leopard -> переустановка sqlite3-проблема с ruby gem

StackOverflow https://stackoverflow.com/questions/1952853

Вопрос

Я получил ruby 1.8.7 (native compiled), rails 2.3.4, OSX 10.6.2, а также sqlite3-ruby.

Ошибка, которую я получаю при доступе к приложению rails, является

Ошибка имени:неинициализированная константа SQLite3::Driver::Native::Драйвер::API

История:
Я обновился до snow leopard, перенеся свои приложения с помощью FW-кабеля со старого macbook на новый.Все работало отлично в течение нескольких месяцев, но вчера мне нужно было установить watir, который зависел от rb-appscript, который не был собран из-за ошибки "неправильной архитектуры" в libsqlite3.dylib.Я полагал, что сборка была сделана на старой машине, поэтому я хотел перестроить sqlite3-ruby:

$ sudo gem удалить sqlite3-ruby

$ sudo gem установить sqlite3-ruby

Создание собственных расширений.Это может занять некоторое время...
ОШИБКА:Ошибка при установке sqlite3-ruby:
ОШИБКА:Не удалось создать собственное расширение gem.

/usr/локальный/bin/ruby extconf.rb
проверка наличия fdatasync() в - lrt...НЕТ
проверка наличия sqlite3.h...ДА
проверка наличия sqlite3_open() в -lsqlite3...НЕТ
* сбой extconf.rb *
Не удалось создать Makefile по какой-то причине, вероятно, из-за отсутствия
необходимые библиотеки и / или заголовки.Проверьте файл mkmf.log для получения дополнительной информации
Подробные сведения.Возможно, вам понадобятся параметры конфигурации.

Похоже, что библиотеки sqlite3 не работают должным образом.Я попытался установить macports sqlite3 (sudo port install sqlite3) и использовать это вместо, но с тем же результатом...поэтому я перестраиваю sqlite3 с нуля..загрузить-> настроить-> создать-> выполнить установку.После этого gem теперь отлично собирается, но не работает в rails, выдавая ошибку в верхней части этой статьи.

Я не совсем уверен, куда идти дальше, потому что я пробовал следующее

  1. Перестройте sqlite3 из новейшего исходного кода (http://www.sqlite.org/download.html)
  2. Переустановленный sqlite3-ruby (sudo gem удаляет sqlite3-ruby и& sudo gem устанавливает sqlite3-ruby)
  3. Использовался sqlite3 из macports (установка sqlite3 через порт sudo и установка sqlite3 через sudo gem-ruby)
  4. Переустановил rails (sudo gem устанавливает rails sqlite3-ruby ) и обновил environment.rb до rails 2.3.5.

Безрезультатно, я все еще получаю эту ошибку:

Ошибка имени:неинициализированная константа SQLite3::Драйвер::Родной::Драйвер::AP
из /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:в const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in
открыть'
из /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76: в `инициализировать'

Кстати, у меня установлен Xcode с компакт-диска Snow Leopard.

Что я могу сделать, чтобы решить проблему?

Это было полезно?

Решение 2

Спасибо за ответы.Вот что я сделал, чтобы решить проблему:

  1. Завершите переустановку ruby1.8.7 в /usr/ local, смотрите здесь: http://hivelogic.com/articles/ruby-rails-leopard

    Примечание:readline не работал при перекомпиляции ruby на моем Mac, поэтому мне пришлось создать и его с нуля и обязательно добавить опцию --with-readline-dir для настройки:

    ./configure --включить общий доступ --включить pthread CFLAGS=-D_XOPEN_SOURCE=1 --prefix=/usr/local --with-readline-dir=/usr/local

  2. Полная переустановка sqlite3 в /usr/local

  3. Перестройте все драгоценные камни в системе с помощью sudo gem install XXX, включая sqlite3-ruby.Это необходимо только для драгоценных камней, специфичных для конкретной платформы, но я обнаружил, что быстрее просто установить все в oneliner:

    sudo gem устанавливает gem1 gem2 ...гемН -но-ри -но-rdoc

Я попытался перейти на ruby1.9, но все перестало работать из-за нарушенных зависимостей в драгоценных камнях и плагинах, поэтому я бы не рекомендовал переходить на 1.9, если вы не готовы к тяжелой отладке и не знаете, как восстановить свою старую систему!

Наконец-то все снова заработало!

Другие советы

Моя проблема была немного иной, и на самом деле ни одно из решений, которые я нашел онлайн, не сработало.

При попытке установить sqlite3-ruby после обновления до Snow Leopard и пробной версии XCode 4.0 я получил сообщение

checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel'

однако sqlite3 был установлен, и повторная установка также не помогла.У меня уже был файл troub раньше с 64-разрядными и универсальными версиями, но я также очистил его.На самом деле, я мог бы работать с sqlite3.

Таким образом, gem install также должен рассказать вам кое-что в этом роде:

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 for inspection.

Итак, перейдите в этот каталог и там найдите extconf.rb, мой был в ./ext/sqlite3/extconf.rb Я обнаружил, что ruby проверяет наличие библиотеки sqlite3, используя

asplode('sqlite3') unless find_library 'sqlite3', 'sqlite3_libversion_number'

Итак, я запустил irb и проверил, почему это не сработало:

  require 'mkmf'
   find_library 'sqlite3', 'sqlite3_libversion_number'

Ну, на самом деле это работает, и мой ruby находит библиотеку.Так почему же это не работает с самого начала?Тщательный просмотр extconf.rb показал следующую строку:

  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

Когда я выполняю это в irb:

require 'mkmf'
  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 
  find_library 'sqlite3', 'sqlite3_libversion_number'

Удивительно, но я больше не найду библиотеку.На самом деле я не понимаю, как это может быть, но именно это и происходит.

Так это и есть лекарство:закомментируйте строку

sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

в extconf.rb

Затем из /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 я выпустил

 sudo ruby ./setup.rb

Это прошло без проблем (я пробовал перед тем, как закомментировать строку sqlite =, и это не сработало)

Перезапустил приложение ruby, у которого были проблемы с sqlite.Работает нормально.

Надеюсь, это кому-нибудь поможет.

Мороженое

Я нашел некоторые рекомендации по этому поводу в блоге Дона Парка по адресу:

http://blog.docuverse.com/2009/09/24/installing-sqlite3-ruby-gem-on-snow-leopard/

Его решение указывает прямо на переполнение стека в следующем потоке:

Snow Leopard, sqlite3-ruby

Ответ о команде ln, похоже, решил мою проблему.Надеюсь, вам это тоже поможет.

Если gem не создается, это не потому, что вам обязательно нужно перестроить sqlite3 из исходного кода, но для сборки gem вам потребуются библиотеки разработчика sqlite3.

В большинстве систем Linux / Unix вы можете установить их, выполнив 'sudo apt-get install sqlite3-dev', однако я не уверен, как это работает с Macports, но убедитесь, что у вас есть этот пакет.Вы должны убедиться, что они находятся на вашем пути, или передать каталог, в котором они находятся, когда вы устанавливаете gem (смотрите Выходные данные gem для получения подсказок относительно вариантов для этого).

У меня sqlite3 работает на моем Mac просто отлично, как с 1.8.7, так и теперь с моим обновленным Ruby 1.9.1.Возможно, вы захотите убедиться, что у вас также установлены инструменты разработчика XCode.

Для тех, кто работает на Snow Leopard 64 и у кого возникла эта проблема, установка этого macport устранила проблему для меня.

sudo port install rb-sqlite3 +universal
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top