代码之家  ›  专栏  ›  技术社区  ›  Greg Reynolds

Ruby在Windows上找不到sqlite3驱动程序

  •  10
  • Greg Reynolds  · 技术社区  · 15 年前

    我正在尝试在Windows上设置Ruby on Rails。我使用的flash rails发行版看起来不错,但sqlite3有问题。我发现线程告诉我安装1.2.3版,它安装得很好。我正在使用Ruby1.9.0,每次我尝试运行一个使用数据库的脚本(例如rake db:create)时,都会收到一条错误消息“找不到sqlite3的驱动程序”。

    这显然是一个丢失的sqlite3.dll,但我的%path%中有该dll,我还尝试将其复制到运行脚本的目录中,即sqlite3 ruby代码所在的目录中。

    有人有什么想法吗?如果可能的话,我希望所有的红宝石都是独立的,这样我就可以从一个笔筒里使用它。

    编辑:为了澄清这一点,我已经使用gem安装来安装ruby-sqlite3 gem,因为它无法找到sqlite3.dll(即使它实际上存在于我的%path%上的目录中)。

    编辑第2部分:在做了更多的挖掘之后,问题是Ruby不会加载sqlite3_api.dll。我把它复制到了我的文件系统中,我只是在读取文件时失败了。同一目录中的其他dll库(例如zlib.dll)工作正常! 我尝试将DLL安装到system32中,但也不起作用。

    8 回复  |  直到 13 年前
        1
  •  7
  •   Martin Gentillon    15 年前

    简单来说,问题在于sqlite3 ruby 1.2.3与ruby 1.9不兼容。这是因为Ruby1.9不将.dll文件用于它使用的C库.so文件。此外,由于sqlite3_api.dll是针对msvcrt-ruby18.dll编写的。这意味着它只支持Ruby1.8.*。

    好消息是有一个胖的二进制版本支持Ruby1.8和Ruby1.9。卸载所有以前的sqlite3 ruby版本,然后安装这个版本。(卸载后可能需要手动删除gem的某些版本。)为了安装它,请使用

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

    有关详细信息,请参阅 this 网站

        2
  •  3
  •   Darin Dimitrov    15 年前

    尝试安装sqlite3 ruby gem:

    gem install sqlite3-ruby
    
        3
  •  3
  •   Dominik Grabiec    15 年前

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

    作为参考,在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环境变量设置正确。(可能需要重新启动系统才能完全传播更改。)

        4
  •  3
  •   Ian Vaughan    15 年前

    Re this link 下载sqlitedll-3_6_10.zip并解压缩到ruby/bin!

        5
  •  1
  •   Lolindrath    15 年前

    试着去 sqlite.org 下载页面并获取压缩后的dll。然后把它放进你的 c:\windows\system32 文件夹,应该可以让Ruby找到它。

        6
  •  1
  •   Mel    13 年前

    运行后重新启动计算机安装sqlite3 ruby

        7
  •  0
  •   Jonathan Lonowski    15 年前

    澄清一下,你用的是哪块宝石? sqlite-ruby sqlite3-ruby ?

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

    我想你是想用第一个,因为它给了我同样的错误。如果是,尝试切换。


    也。。你说这个是什么字面意思?

    但我的%path%中有DLL

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

    第一个会试图找到 C:\sqlite\sqlite3.dll\sqlite3.dll

        8
  •  0
  •   Pedro Lopez    13 年前

    我使用Ruby1.8.7(也适用于1.9.1) 操作系统是WindowsXP SP3

    1. http://www.sqlite.org/download.html 并下载文件 sqlitedll-3_7_0_1.zip(265.19 kib) 然后解开拉链 SqLIE3.3.DLL

    2. 将sqlite3.dll复制到bin文件夹 C:\ruby191\bin或C:\ruby187\bin 然后它工作