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

У меня есть Ruby 1.8.7 (скомпилированный в собственном коде), rails 2.3.4, OSX 10.6.2, а также sqlite3-ruby.

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

NameError: неинициализированная константа SQLite3 :: Driver :: Native :: Driver :: API

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

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

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

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

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

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

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

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

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

NameError: неинициализированная константа SQLite3 :: Driver :: Native :: Driver :: 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
open '
из /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:в `initialize'

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

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


person Carl Tessler    schedule 23.12.2009    source источник


Ответы (5)


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

При попытке установить 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 был установлен, а также повторная установка не помогла. У меня уже были проблемы с 64-битными и универсальными версиями, но я их тоже решил. Фактически, я мог работать с sqlite3.

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

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'

На самом деле это работает, и мой рубин находит библиотеку. Так почему же не работает из настройки? При внимательном просмотре 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. Работает отлично.

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

Мороженое

person Icecream    schedule 26.08.2010
comment
Да! Это был ответ. Огромное спасибо! - person Jason Duffett; 30.05.2011

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

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

  3. # P6 #
    # P7 #

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

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

person Carl Tessler    schedule 28.12.2009
comment
как установить sqlite3 в определенный каталог? - person CodingWithoutComments; 26.01.2010

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

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

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

Снежный барс, sqlite3-ruby

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

person Mike Richardson    schedule 26.12.2009

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

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

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

person Nicholas C    schedule 26.12.2009

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

sudo port install rb-sqlite3 +universal
person nacengineer    schedule 13.05.2010