Проблема с установкой sqlite3-ruby! - PullRequest
9 голосов
/ 13 августа 2010

У меня проблемы с установкой гема sqlite3-ruby на crunchbang linux.После поисков в Google в течение последних нескольких часов и следования за несколькими людьми с той же проблемой, я все еще не получил ее к работе.

Вот что я вижу после попытки 'sudo gem install sqlite3-ruby'

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

/ usr / bin / ruby1.8 extconf.rb
проверка для sqlite3.h ... да
проверка для sqlite3_libversion_number () в -lsqlite3 ... да
проверка для rb_proc_arity() ... нет
проверка для sqlite3_initialize () ... нет
sqlite3-ruby поддерживает только версии sqlite3 3.6.16+, пожалуйста, обновите!
* extconf.rb не удалось *
Не удалось создать Makefile по какой-то причине, возможно, из-за отсутствия
необходимых библиотек и / или заголовков.Проверьте файл mkmf.log для получения более подробной информации
.Вам могут понадобиться параметры конфигурации.

Далее я наткнулся на эту страницу;http://groups.google.com/group/sqlite3-ruby/browse_thread/thread/f22d098b561c48af/6e754f7b2fc3cd75?#6e754f7b2fc3cd75

Я загрузил sqlite-amalgamation-3.7.0.1.tar.gz и выдал следующие команды:

tar zxvf sqlite-amalgamation-3.7.0.1.tar.gz
cd cd sqlite-3.7.0.1
mkdir $ HOME / sqlite
./configure --prefix = $ HOME / sqlite
make && make install
sudo gem install sqlite3-ruby - --with-sqlite3-dir = $ HOME / sqlite

Тем не менее, я все еще получаю ту же ошибку.Я использовал 'sudo apt-get install sqlite3 libsqlite3-dev', но все равно получаю ту же ошибку.

Есть ли какой-нибудь совет?

И в качестве небольшого отступления, почему, когда я использую 'sudo apt-get install sqlite3', он берет 3.5.9 вместо 3.7.0.1, которые я загружал вручную?

Ответы [ 7 ]

15 голосов
/ 29 октября 2010

Установите более низкую версию sqlite3-ruby, чтобы решить вашу проблему:

sudo gem install sqlite3-ruby --version=1.2.5
3 голосов
/ 10 сентября 2010

Это происходит из-за того, что extconf.rb выбирает вашу старую библиотеку 3.5.9 при тестировании функций перед сборкой Makefile.

Одним из способов сократить это сокращение является apt-get, удалить sqlite3 и повторить попытку

sudo gem install sqlite3-ruby -- --with-sqlite3-dir=$HOME/sqlite

Это может уберечь вас от несовместимости, если вы хотите использовать двоичный файл командной строки sqlite3.

Другое решение - скопировать новый ~ / sqlite / lib / libsqlite3.a в каталог сборки.вашего гема (см. gem env, что-то вроде gems / sqlite3-ruby-1.3.1 / ext / sqlite3) и повторите попытку

sudo gem install sqlite3-ruby

Тест должен забрать вашу новую библиотеку и установить нормально.

2 голосов
/ 30 января 2011

Для файла README.rdoc sqlite3-ruby (теперь он называется sqlite3) вы можете использовать следующий метод для указания правильных библиотек:

Если у вас установлен sqlite3 в нестандартном месте, вы можете указать расположение include и lib файлы, выполнив:

gem install sqlite3 -- --with-sqlite3-include=/opt/local/include \</p> <p>--with-sqlite3-lib=/opt/local/lib

1 голос
/ 13 марта 2011

Я столкнулся с той же проблемой на OSX 10.5.8

Решения были довольно просты:

1.- Xcode, загруженный с apple dev .: xcode314_2809_developerdvd.dmg (требуется регистрация) 2.- Загрузите и установите macports: http://distfiles.macports.org/MacPorts/MacPorts-1.9.2-10.5-Leopard.dmg 3.- sudo port install sqlite3

И все работало как задумано.

Надеюсь, этот результат полезен!

1 голос
/ 04 февраля 2011

У меня была похожая проблема - я просто закомментировал следующую раздражающую строку из ./Gemfile в каталоге проекта:

# gem 'sqlite3-ruby', :require => 'sqlite3'

и сделал:

bundle install

сервер script / rails снова работал нормально. Уф!

Похоже, что sqlite3 дублируется - странно

1 голос
/ 05 ноября 2010

Шон, позволь мне попытаться уточнить.

Ruby адаптируется к библиотеке sqlite3 путем компиляции мелких примеров и проверки успешности компиляции.Это забирает старую библиотеку, которая не включает требуемые функции.

Первое решение - удалить старую библиотеку и направить ruby ​​в каталог, в который вы загрузили новую версию.В зависимости от системы, которую вы используете, вы должны выбрать правильный менеджер пакетов: apt-get, dpkg, yum, yast, ipkg, ..., чтобы удалить устаревший пакет.Это гарантирует, что ваша сборка не соберет никаких старых частей.Затем вы должны убедиться, что вы указываете ruby ​​на правильный каталог, в котором находится новая библиотека, с опцией --with-sqlite3-dir.

Второе решение - это своего рода хак.Он полагается на то, что компилятор C выбирает файлы в текущем каталоге раньше других.Вы можете использовать cp, mc или любой другой файловый менеджер для копирования библиотек .a и заголовков .h в каталог сборки.Сборка должна быть в порядке, но ваша команда sqlite3 останется старой, возможно, несовместимой с базами данных, созданными с вашей новой библиотекой.

HTH, Jarek

1 голос
/ 17 сентября 2010

У меня была точно такая же проблема. Решение Ярека сработало, когда я переместил все файлы (не только libsqlite3.a) с ~/sqlite/lib на gems/sqlite3-ruby-1.3.1/ext/sqlite3.

...