2

Linux 2.6.18-92.el5、ruby 1.8.7、Rails 2.2.2、mysql gem 2.7

我在 /usr/local 下安装了 MySQL 二进制发行版,然后像这样安装了 mysql gem:

gem install mysql --no-rdoc --no-ri \
  -- --with-mysql-include=/usr/local/mysql/include \
  --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-config=/usr/local/mysql/bin/mysql_config

当我运行时,irb> require 'mysql'我收到如下所示的错误:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'mysql'
LoadError: libmysqlclient.so.16: cannot open shared object file:
  No such file or directory - 
    /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so
  from /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so
  from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
  custom_require.rb:36:in `require' from (irb):2

经过一番谷歌搜索后,我发现我可以ldconfig用来配置 mysql.so 以供整个系统使用。一旦我将“/usr/local/mysql/lib”添加到/etc/ld.so.conf并运行ldconfig,它就可以正常工作了:

irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'mysql'
=> true

好的,所以我开始工作了。但我的问题是,为什么我会收到这个错误?你曾经能够做到这gem install mysql一点,它会奏效。有没有其他人遇到过同样的错误?使用ldconfig似乎有点脆弱且不可维护。有更好的解决方案吗?

任何见解将不胜感激。

谢谢,

伊森

4

2 回答 2

2

我也遇到了问题(在 Mac OS X 上),并且很沮丧,gem install mysql因为它不像以前那么简单了。

短视的答案是 mysql gem 需要构建本机扩展,为此,它需要一些有关 MySQL 库的路径信息(特定于您的系统)。获取该信息的最可靠方法是由您提供。

更大的答案是这是 gem 系统中的一个设计错误。当几乎所有其他 gem 安装时gem install foo,系统和 gem 提交者需要为用户提供一些关于重要异常情况的指令——即使它只是反馈错误消息,告诉你必须提供更多信息来安装这个 gem ,以及该信息是什么。

一番谷歌搜索最终让我找到了答案,但让我看到了更多其他人被一个简单的过程蒙蔽了双眼,这个过程在没有警告的情况下变得复杂。

于 2008-12-09T17:28:53.550 回答
1

可能与安装mysql时使用的前缀有关?--with-mysql-lib=/usr/local/mysql/lib

据推测,如果那是 /usr/local/lib(或某个 ldconfig 已经设置为查看)和/或如果您刚刚使用了 /usr/local 之类的顶级前缀,那么您可能没有遇到问题( ?)

于 2008-12-04T22:57:29.553 回答