Ruby не может найти драйвер sqlite3 на windows - PullRequest
10 голосов
/ 05 февраля 2009

Я пытаюсь настроить Ruby on Rails для Windows. Я использую дистрибутив Flash Rails, который выглядит довольно хорошо, но есть проблема с sqlite3. Я нашел потоки, говорящие мне, чтобы установить версию 1.2.3, которая установлена ​​нормально. Я использую ruby ​​1.9.0, и каждый раз, когда я пытаюсь запустить скрипт (например, rake db: create), который использует базу данных, я получаю сообщение об ошибке «Драйвер для sqlite3 не найден».

Это, очевидно, недостающий файл sqlite3.dll, но у меня есть dll в моем% PATH%, и я также попытался скопировать его в каталог, из которого я запускаю скрипт, в каталог, где живет код sqlite3 ruby.

У кого-нибудь есть идеи? Если возможно, я хочу, чтобы все вещи в рубине были самодостаточными, чтобы я мог использовать их с пера.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я уже использовал gem install для установки гема ruby-sqlite3 - он просто не работает, так как не может найти sqlite3.dll (даже если он действительно присутствует в каталоге на моем% PATH%)

РЕДАКТИРОВАТЬ ЧАСТЬ 2: После еще нескольких копаний появляется проблема, что ruby ​​не загружает sqlite3_api.dll. Я скопировал его по всей моей файловой системе, но у меня просто не получается прочитать файл. Другие библиотеки DLL в том же каталоге (например, zlib.dll) работают нормально! Я попытался установить dll в system32, и это тоже не сработало.

Ответы [ 8 ]

7 голосов
/ 21 июля 2009

Проще говоря, проблема в том, что sqlite3-ruby 1.2.3 не совместим с ruby ​​1.9. Это вызвано тем, что ruby ​​1.9 не использует файлы .dll для библиотек c, а вместо этого использует файлы .so. Кроме того, поскольку sqlite3_api.dll пишется против msvcrt-ruby18.dll. Это означает, что он поддерживает только ruby ​​1.8. *.

Хорошей новостью является то, что существует толстая бинарная версия, которая будет поддерживать как ruby ​​1.8, так и ruby ​​1.9. Деинсталлируйте все предыдущие версии sqlite3-ruby и затем установите эту. (Возможно, вам придется вручную удалить некоторые версии драгоценного камня после удаления.) Чтобы установить его, используйте

install sqlite3-ruby --source http://gems.rubyinstaller.org

для получения дополнительной информации см. этот веб-сайт

3 голосов
/ 14 января 2010

По этой ссылке Скачайте sqlitedll-3_6_10.zip и распакуйте в ruby ​​/ bin!

3 голосов
/ 14 февраля 2009

Нечто подобное произошло со мной недавно, поэтому я решил обновить свой ответ.

Для справки есть файл sqlite3_api.dll, расположенный в каталоге lib гема. Также файл sqlite3.dll должен быть доступен по пути. Это разные файлы, первый требуется гему для взаимодействия кода Ruby с C, а второй содержит фактическую реализацию Sqlite.

Лучше всего получить второй файл с веб-сайта sqlite и извлечь его в каталог Ruby \ bin (поскольку вам больше не нужно вручную помещать DLL в каталоги windows или windows \ system).

Так что для справки "sqlite3_api.dll" должен быть в:

Ruby\lib\ruby\gems\1.8\gems\sqlite3-ruby-1.2.3-x86-mswin32\lib

и "sqlite3.dll" должен находиться на пути, возможно, в:

Ruby\bin

Что касается проблемы «драйвер не найден», я бы предложил сначала попробовать простые вещи и убедиться, что гемы установлены правильно, в актуальном состоянии и что переменные среды RUBYLIB и PATH установлены правильно. (Для полного распространения изменений может потребоваться перезагрузка системы.)

3 голосов
/ 05 февраля 2009

Попробуйте установить гем sqlite3-ruby:

gem install sqlite3-ruby
1 голос
/ 18 февраля 2011

Перезагрузите компьютер после запуска установки sqlite3-ruby

1 голос
/ 05 февраля 2009

Попробуйте зайти на sqlite.org страницу загрузки и получить zll-архив. Затем поместите это в вашу папку c:\windows\system32, которая позволит Ruby найти его.

0 голосов
/ 02 марта 2011

Я использую Ruby 1.8.7 (тоже работает с 1.9.1) ОС WindowsXP SP3

  1. Перейти к http://www.sqlite.org/download.html и скачать файл sqlitedll-3_7_0_1.zip (265,19 КиБ) и распакуем потом получим sqlite3.dll

  2. Скопируйте sqlite3.dll в папку bin как C: \ Ruby191 \ bin или C: \ Ruby187 \ bin тогда это работает

0 голосов
/ 06 февраля 2009

Чтобы уточнить, какой драгоценный камень вы используете? sqlite-ruby или sqlite3-ruby?

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

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


Также .. Насколько буквально вы это подразумеваете?

но у меня есть dll в моем% PATH%

  1. PATH=...;C:\sqlite\sqlite3.dll
  2. PATH=...;C:\sqlite

Первый попытается найти C:\sqlite\sqlite3.dll\sqlite3.dll, AFAIK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...