Ruby无法在Windows上找到sqlite3驱动程序

我试图在Windows上设置Ruby on Rails。 我正在使用看起来相当不错的Flash Rails发行版,但是sqlite3存在问题。 我发现线程告诉我安装版本1.2.3,安装正常。 我正在使用ruby 1.9.0,每次我尝试运行使用数据库的脚本(例如rake db:create)时,都会收到错误消息“找不到sqlite3的驱动程序”。

这显然是一个缺少的sqlite3.dll,但我的%PATH%中有dll,我也尝试将其复制到我运行脚本的目录,即sqlite3 ruby​​代码所在的目录。

有没有人有任何想法? 如果可能的话,我希望所有的ruby都是自包含的,所以我可以用笔驱动器来使用它。

编辑:为了澄清,我已经使用gem install来安装ruby-sqlite3 gem – 它只是没有function,因为它找不到sqlite3.dll(即使它实际上存在于我的%PATH%目录中)

编辑第2部分:在做了一些挖掘后,问题似乎是ruby不会加载sqlite3_api.dll。 我已将其复制到我的文件系统上,我只是无法读取文件。 同一目录中的其他dll库(例如zlib.dll)工作正常! 我尝试将dll安装到system32中,但这也无效。

简单问题就是sqlite3-ruby 1.2.3与ruby 1.9不兼容。 这是因为ruby 1.9不使用.dll文件来代替它使用.so文件的c库。 此外,因为sqlite3_api.dll是针对msvcrt-ruby18.dll编写的。 这意味着它特别只支持ruby 1.8。*。

好消息是有一个胖二进制版本将支持ruby 1.8和ruby 1.9。 卸载所有以前版本的sqlite3-ruby,然后安装此版本。 (您可能必须在卸载后手动删除gem的某些版本。)以便安装它使用

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

有关更多信息,请访问此网站

尝试安装sqlite3-ruby gem:

 gem install sqlite3-ruby 

我最近发生了类似的事情,所以我想我会更新我的答案。

作为参考,有一个位于gem的lib目录中的sqlite3_api.dll文件。 还需要在路径上访问sqlite3.dll文件。 它们是不同的文件,第一个是gem需要将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 

至于“找不到驱动程序”问题,我建议先尝试简单的事情,确保gems安装正确,最新,并且RUBYLIB和PATH环境变量设置得恰当。 (可能需要重新启动系统才能完全传播更改。)

重新链接下载sqlitedll-3_6_10.zip并解压缩到ruby / bin!

尝试去sqlite.org下载页面并获取压缩的dll。 然后把它放在你的c:\windows\system32文件夹中,这应该允许Ruby找到它。

运行install sqlite3-ruby后重新启动计算机

澄清一下,您使用的是哪种gem? sqlite-rubysqlite3-ruby

他们是同一个项目的一部分,但不同的版本。 关键是sqlite3似乎包含驱动程序代码。

我假设你试图使用第一个,因为它给了我同样的错误。 如果是这样,请尝试切换。


另外..你的意思是这个字面意思?

但我的%PATH%中有dll

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

第一个将尝试查找C:\sqlite\sqlite3.dll\sqlite3.dll ,AFAIK。

我使用Ruby 1.8.7(也适用于1.9.1)操作系统是WindowsXP SP3

  1. 转到http://www.sqlite.org/download.html并下载文件sqlitedll-3_7_0_1.zip(265.19 KiB)然后解压缩然后我们将获得sqlite3.dll

  2. 将sqlite3.dll复制到您的bin文件夹,如C:\ Ruby191 \ bin或C:\ Ruby187 \ bin,然后它可以工作