Обновление Snow Leopard -> переустановка проблемы с sqlite3-ruby gem - PullRequest
1 голос
/ 23 декабря 2009

Я получил ruby ​​1.8.7 (скомпилирован нативно), rails 2.3.4, OSX 10.6.2, а также sqlite3-ruby.

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

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

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

$ sudo gem uninstall sqlite3-ruby

$ sudo gem install sqlite3-ruby

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

/ usr / local / bin / ruby ​​extconf.rb
проверка на fdatasync () в -lrt ... нет
проверка на 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 sqlite3-ruby)
  3. Используется sqlite3 из macports (sudo port устанавливает 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:in const_missing'<br> 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:in `initialize '

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

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

Ответы [ 5 ]

5 голосов
/ 26 августа 2010

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

При попытке установить 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. Работает нормально.

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

1039 * Icecream *

2 голосов
/ 28 декабря 2009

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

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

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

    . / Configure --enable-shared --enable-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 install gem1 gem2 ... gemN --no-ri --no-rdoc

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

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

0 голосов
/ 13 мая 2010

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

sudo port install rb-sqlite3 +universal
0 голосов
/ 26 декабря 2009

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

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

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

0 голосов
/ 26 декабря 2009

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

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

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

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

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

...