安装sqlite3-ruby的问题!

时间:2010-08-13 01:15:57

标签: ruby rubygems sqlite3-ruby

我在crunchbang linux上安装sqlite3-ruby gem时遇到问题。谷歌搜索了过去几个小时,并跟随几个有同样问题的人,我仍然没有让它工作。

这是我在尝试'sudo gem install sqlite3-ruby'后看到的内容

构建原生扩展。这可能需要一段时间......
错误:安装sqlite3-ruby时出错:
        错误:无法构建gem原生扩展。

/usr/bin/ruby1.8 extconf.rb
检查sqlite3.h ...是的 检查-lsqlite3中的sqlite3_libversion_number()...是的 检查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 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 个答案:

答案 0 :(得分:15)

安装较低版本的sqlite3-ruby应解决您的问题:

sudo gem install sqlite3-ruby --version=1.2.5

答案 1 :(得分:3)

这是因为在将Makefile放在一起之前测试函数时,extconf.rb会选择旧的3.5.9库。

削减这一短缺的一个解决方案是apt-get remove sqlite3并重试

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

如果您想使用sqlite3命令行二进制文件,这可能会使您免于不兼容。

另一种解决方案是将新的〜/ sqlite / lib / libsqlite3.a复制到gem的构建目录中(参见gem env,类似于gems / sqlite3-ruby-1.3.1 / ext / sqlite3)并重试< / p>

sudo gem install sqlite3-ruby

测试现在应该拿起你的新库并安装好。

答案 2 :(得分:2)

根据sqlite3-ruby(现在命名为sqlite3)README.rdoc,您可以使用以下方法指向正确的库:

  

如果您在非标准位置安装了sqlite3,则可以指定   include和lib的位置   文件:

     

gem install sqlite3 -- --with-sqlite3-include=/opt/local/include \

--with-sqlite3-lib=/opt/local/lib

答案 3 :(得分:1)

我遇到了完全相同的问题。当我将所有文件(不仅仅是libsqlite3.a)从~/sqlite/lib移动到gems/sqlite3-ruby-1.3.1/ext/sqlite3时,Jarek的解决方案才有效。

答案 4 :(得分:1)

肖恩,让我试着详细说明。

Ruby通过编译小例子并验证编译是否成功来适应sqlite3库。这会选择旧库,但不包含所需的功能。

第一个解决方案是删除旧库并将ruby定向到您下载新版本的目录。根据您使用的系统,您必须选择正确的包管理器:apt-get,dpkg,yum,yast,ipkg,...以删除过时的包。这可以确保您的构建不会拾取任何旧件。然后你必须确保使用--with-sqlite3-dir选项将ruby指向新库所在的正确目录。

第二种解决方案是一种黑客行为。它依赖于C编译器在其他目录之前获取当前目录中的文件。您可以使用cp,mc或任何其他文件管理器将.a库和.h标头复制到构建目录。构建应该没问题,但是你的sqlite3命令仍然是旧命令,可能与用新库创建的数据库不兼容。

HTH,Jarek

答案 5 :(得分:1)

我遇到了类似的问题 - 我只是将项目目录中./Gemfile下面的恼人行注释掉:

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

并做了:

bundle install

script / rails服务器再次运行正常。呼!

似乎sqlite3是重复的 - 很奇怪

答案 6 :(得分:1)

我在OSX 10.5.8上遇到了同样的问题

解决方案非常简单:

1.-从苹果开发商下载的Xcode:xcode314_2809_developerdvd.dmg(需要注册) 2.-下载并安装macports:http://distfiles.macports.org/MacPorts/MacPorts-1.9.2-10.5-Leopard.dmg 3.- sudo port install sqlite3

一切都按预期工作。

希望这个结果有用!