rails服务器无法启动mysql2在OSX 10.6.5上使用rvm&ruby 1.9.2-p0

当我启动rails服务器时出现以下错误:

$ rails server /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle 

在rvm使用ruby-1.9.2-p0命令后,我使用以下命令安装了mysql2:

 $ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config Building native extensions. This could take a while... Successfully installed mysql2-0.2.6 1 gem installed Installing ri documentation for mysql2-0.2.6... Enclosing class/module 'mMysql2' for class Client not known Installing RDoc documentation for mysql2-0.2.6... Enclosing class/module 'mMysql2' for class Client not known 

我在我的Gemfile以及在database.yml文件和bundle安装完成罚款mysql2

 $ bundle show mysql2 /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6 

我知道rails服务器错误是由于它不知道OSX上的mysql_config位置,但是在gem install上,我指定了正确的位置。 然而,RVM的gem并不尊重mysql_config的位置。

任何人都有这个解决scheme?

问题来自mysql2 gem缺less来自MySQL的dynamic库。

install_name_tool ...更干净的解决schemeinstall_name_tool ...将需要更新您的DYLD_LIBRARY_PATH以将MySQL库添加到它。 为此,请更新您的~/.bash_profile以添加MySQL库文件夹:

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

注意:您可能需要根据您的安装更新MySQL位置

这应该保持干净,但也要确保任何需要MySQLdynamic库的gem或代码都能find它们。

参考: http : //lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

参考更新2012年7月: OS X 10.8中的更改使简单的方法变得不那么优雅。 如果您设置了该variables,则每次运行setuid或setgid程序时,都会在stderr上收到此警告:

 dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

使用Phusion Passenger Standalone的Ruby开发人员将每5秒钟在控制台中看到此消息。 它变得非常刺激,非常快。

我已经提交了一个苹果的错误。 这也是在OpenRadar。

同时,还有第三种方法来解决不需要设置DYLD_LIBRARY_PATH(解决此10.8问题)或使用install_name_tool攻击.bundle文件的客户端库path问题:

 $ brew install mysql 

我在这里find答案: Mysql 5.5,Snow Leopard和rails

 sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

在OS X 10.8(Mountain Lion)中,列出的答案都有问题,正如答案和评论中所述。

  • DYLD_LIBRARY_PATH设置为包含/ usr / local / mysql / lib会给出OS X和brew的警告
  • 每次安装或升级gem时,都需要使用install_name_tool来破解gem二进制文件的外观。
  • 切换到brew的mysql可能不起作用; 而且无论如何我不想重新configuration一个已经在运行的安装

一个更简单,更健壮的解决scheme恕我直言,就是在默认的dynamic库searchpath中放入一个链接到库,该path方便地包含/usr/local/lib 。 那是:

 ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib 

法案,

Frederic的答案将解决这个问题,但是您可能需要根据版本更改命令中的某些项目,以及如何在您的系统上命名。

例如,最新版本的mysql libmysqlclient.16.dylib实际上是libmysqlclient.18.dylib。 尝试做一个:

 locate libmysqlclient.18.dylib 

如果这不返回path,你可以去:

 /usr/local/{your-mysql}/lib 

find该文件。 然后只需要一个PWD来find命令的正确目录。

您还需要确定已安装的ruby的实际包名是什么。 你可以通过使用find这个

 rvm info 

例如,我的1.9.2的安装是ruby-1.9.2.p180,而不是ruby-1.9.2p0。 这也需要在Frederics命令中更改。

所以,对我来说,弗雷德里克的命令分别为1.8.7和1.9.2固定rvmruby:

 sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

以下通过: http : //lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

2012年7月更新:

OS X 10.8的变化使得简单的方法更加优雅。 如果您设置了该variables,则每次运行setuid或setgid程序时,都会在stderr上收到此警告:

 dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

使用Phusion Passenger Standalone的Ruby开发人员将每5秒钟在控制台中看到此消息。 它变得非常刺激,非常快。

我已经提交了一个苹果的错误。 这也是在OpenRadar。

同时,还有第三种方法来解决不需要设置DYLD_LIBRARY_PATH(解决此10.8问题)或使用install_name_tool攻击.bundle文件的客户端库path问题:

 $ brew install mysql 

我在一个不同的位置,我不得不使用:

 sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle. 

这是我做的(与其他人相似)

 sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle 

我被困在这一段时间,来到一个不同的解决scheme。

注意缺less的库是如何版本16

未加载库:libmysqlclient.16.dylib(LoadError)

事实certificate,我有该库的版本20 – libmysqlclient.20.dylib

我在Gemfile中正确地使用了gem'mysql2 gem 'mysql2' ,但是我需要做的是卸载gem, gem uninstall mysql (我安装了gem的多个版本),然后做一个新的bundle install来获得我需要的版本这个库。

之后,它查找并find了该lib的正确版本。

升级到最新版本的mysql并重新安装mysql2 gem工程给我brew upgrade mysql gem uninstall mysql2 gem install mysql2

BTW:我的MySQL版本是5.7.18,mysql2 gem版本是0.4.5