在Snow Leopard上安装mysql gem的问题:未初始化的常量MysqlCompat :: MysqlRes

时间:2009-12-22 12:46:36

标签: mysql ruby rubygems osx-snow-leopard gem

我在尝试安装Ruby mysql gem驱动程序时遇到了问题。

我最近升级到 Snow Leopard 并完成了MySQL的Hivelogic手动安装。这一切似乎工作正常,因为我可以从命令行访问mysql并对数据库进行更改。

我的问题是,如果我现在使用

rake db:migrate 

我明白了:

rake aborted!
uninitialized constant MysqlCompat::MysqlRes

(See full trace by running task with --trace)

现在看来我的mysql gem工作不正常,因为我可以使用Python驱动程序(我编译到)从Python中访问MySQL。因此,我尝试使用此站点中的以下命令重建gem:http://techliberty.blogspot.com/,(顺便说一句,我使用的是最新的Intel MacBook Pro):

  sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

虽然我没有文档的定义,但是编译了这个:

  Building native extensions.  This could take a while...
  Successfully installed mysql-2.8.1
  1 gem installed
  Installing ri documentation for mysql-2.8.1...

  No definition for next_result

  No definition for field_name
  ...

我有点难过,因为我的mysql_config位于正确的位置:

 /usr/local/mysql/bin/mysql_config

我已从系统中删除了mysql gem的所有其他实例。

任何建议都将不胜感激。非常感谢。

PS我看过上一篇文章uninitialized constant MysqlCompat::MysqlRes (using mms2r gem),但它似乎不适用于我的版本。

17 个答案:

答案 0 :(得分:18)

基本上问题是无法找到动态库libmysqlclient。上述解决方案可行,但您需要在重建gem或重新安装新版本的MySQL时重新应用它们。

另一种方法是将包含库的MySQL目录添加到动态加载路径中。将以下内容放在我的.bashrc文件中解决了这个问题:

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

答案 1 :(得分:10)

好的,我终于解决了这个问题。

发生这种情况的原因是我安装了两个版本的Ruby。

  1. 在安装Snow Leopard之前,我按照HiveLogic指南编译并安装了我自己的Ruby版本。
  2. 然后我升级到Snow Leopard(它拥有自己的Ruby版本)
  3. 这两个版本冲突并且意味着当我尝试使用正确的ARCHFLAGS安装MySQL gem时,系统认为我使用的是不同版本的Ruby。

    修复很简单:

    1. 删除HiveLogic版本的Ruby(http://pivotallabs.com/users/chad/blog/articles/407-removing-old-ruby-source-installation-after-a-leopard-upgrade
    2. 使用正确的ARCHFLAGS重新编译MySQL gem:

      sudo env ARCHFLAGS =“ - arch x86_64”gem install --no-rdoc --no-ri mysql - --with-mysql-config = / usr / local / mysql / bin / mysql_config

      < / LI>

      一旦我完成了这一切,一切正常。 希望它适合你。

答案 2 :(得分:10)

在与这个问题摔跤了好几天后,我终于把它钉了起来。我做过的两件事让它发挥作用:

  1. sudo env ARCHFLAGS =“ - arch x86_64” gem install --no-rdoc --no-ri mysql - --with-mysql-config = / usr / local / mysql / bin / mysql_config
  2. export DYLD_LIBRARY_PATH =“/ usr / local / mysql / lib:$ DYLD_LIBRARY_PATH”
  3. 我有点惊讶#2只是史蒂文·钱宁提到的。

    我使用Snow Leopard,并且只安装了1个MySQL(x86_64)5.5和1个红宝石(预装了Snow Leopard)。

答案 3 :(得分:6)

好吧,我是新手。经过一段时间的努力,因为以上都没有为我工作,我认为问题是由于我的“mysql”是64位安装而ruby是32位。 检查这些命令

file `which mysql`
file `which ruby`

两者都应匹配Mach-O 64位可执行x86_64或Mach-O 64位可执行i386。 我安装了一个32位的mysql,从源代码和rails中重新安装了ruby,从那以后一直运行得很完美。 我在Leopard btw上。

答案 4 :(得分:2)

这里也有同样的问题;已经和我一起摔跤了两个多星期了!

我不是ROR专家,但是从其他更有知识渊博的人那里找到解决方案,问题似乎指向Ruby Gem for mysql,显然,它错误地安装在Mac上。

我将继续在Ruby Forge网站上进行调查,看看是否有任何Ruby Gem大师可以纠正这个可怕的bug ....我需要我的Rails工作!时间就是金钱!

所以我在RubyForge Mysql developers bug tracking page报告了这个错误。

我当然希望他们可以提供帮助,因为这会削弱我目前的项目。

如果其他人可以在那里支持我的错误报告,也许会得到更多的关注;请进来!

答案 5 :(得分:2)

我已经应用了hivelogic post的指令,但是使用了MySQL的5.1.41版本。对于宝石安装我做了两件事:

sudo gem uninstall mysql
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

事情对我很有用。

答案 6 :(得分:1)

您可能会按照上述说明操作但忘记在重新安装Mysql之前终止服务器。这不会使错误消息消失。这发生在我身上。

在这里尝试了所有不同的选项后,我尝试了以下内容:

  

ps aux | grep'mysql'

     

kill [pid_number_for_mysql]

基本上,杀死服务器..艰难的方式。然后,重新启动服务器。

答案 7 :(得分:1)

如果您使用的是MySQL 5.5,那么这些步骤可以让它对我们有用:

安装mysql-2.8.1的命令:

sudo env ARCHFLAGS="-arch x86_64" gem install --no-rdoc --no-ri  mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

使mysql-2.8.1与mysql 5.5一起使用的命令:

sudo ln -s ../mysql/lib/libmysqlclient.16.dylib libmysqlclient.16.dylib

希望有所帮助!

答案 8 :(得分:1)

这可能是Mysql版本的问题。您应该安装最稳定的版本(MYSQL 5.1)。请参阅我的博文:http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

答案 9 :(得分:1)

在解决问题之后,我也发现问题与安装了相同mysql gem版本的多个二进制文件有关。以下为我修好了。

gem uninstall mysql
Select gem to uninstall:
 1. mysql-2.8.1
 2. mysql-2.8.1
 3. All versions
> 3

Successfully uninstalled mysql-2.8.1
Successfully uninstalled mysql-2.8.1

接下来,我在Snow Leopard机器上从源代码重新编译了mysql gem,并且全世界都在膨胀。

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql-5.1.46-osx10.6-x86_64/bin/mysql_config

答案 10 :(得分:0)

我有这个,或者至少是类似的问题(Hivelogic没有涉及,它不是升级,而是一个新系统)。我同意这可能是64位问题。我有一个链接给你,在我做了所有其他头部和屁股刮伤之后,终于保存了我的屁股(和大脑)。

[http://forums.mysql.com/read.php?116,359591,359591]

祝你好运过这个配置BS并进行一些编码。

答案 11 :(得分:0)

在搜索了这个特定问题很长一段时间后,在没有运气的情况下尝试了所有上述选项(以及许多其他网站上的选项),我删除了我的mysql-5.5安装并安装了mysql-5.1。突然间,有了上述帮助编译64位版本,我终于设法安装了一个有效的mysql gem。

因此,如果您遇到此问题并且正在运行mysql 5.5,请尝试降级到mysql 5.1。

答案 12 :(得分:0)

非常快速的解决方法。

这个问题本周再次出现在我不习惯的开发机器上。根据emson初始响应的第2步,它只需要使用正确的ARCHFLAGS重新编译MySQL gem:

sudo env ARCHFLAGS="-arch x86_64" gem install --no-rdoc --no-ri mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

答案 13 :(得分:0)

如果有人使用rvm与ruby 1.8.7和mysql x86(32位版本)并且有这个问题。您会发现此链接很有用:http://rvm.beginrescueend.com/integration/databases/。您将需要在x86_64版本中安装mysql,然后安装mysql gem并将archflags设置为x86_64。原因是即使您尝试将gem安装为x86以匹配您的mysql x86。但是ruby版本是64位。所以你真的需要三个匹配:Ruby,mysql和mysql gem。所以更简单的方法是将所有这些都用64位。

答案 14 :(得分:0)

有些问题与过时或多重冲突的红宝石和宝石二进制文件有关。我自己有问题要“透明地”使用系统ruby编译mysql gem,同时尝试使用ruby 1.9运行我的代码。通过这个线程解决问题之后,一切都进展顺利。

为了避免这些问题和记录,RVM工具包可能非常方便:http://rvm.beginrescueend.com。它有助于正确管理多个ruby版本,并且巧妙地管理所有版本的gem,而无需为每个版本保留副本。

似乎使用RVM可以帮助避免此线程中的一些问题。

答案 15 :(得分:0)

我有同样的问题。我在/ usr / local / mysql / current /中安装了mysql(在我的例子中,为Snow Leopard的5.1.48 64位),而不是在/ usr / local / mysql中。但是,mysql客户端分片库(libmysqlclient.16.dylib)中嵌入了/usr/local/mysql/lib/libmysqlclient.16.dylib的路径。

使用install_name_tool几次中断尝试修复此问题之后,有效的方法是更改​​共享库中的路径,如下所示,然后重建mysql 2.8.1 ruby​​gem,同时指定my:

# change the path embedded in libmysqlclient.dylib
sudo install_name_tool -change /usr/local/mysql/lib/libmysqlclient.16.dylib  /usr/local/mysql/current/lib/libmysqlclient.16.dylib /usr/local/mysql/current/lib/libmysqlclient.16.dylib

# reinstall the mysql gem
sudo ARCHFLAGS="-arch i386 -arch x86_64" gem install --no-rdoc --no-ri mysql -- --with-mysql-dir=/usr/local/mysql/current --with-mysql-config=/usr/local/mysql/current/bin/mysql_config

请注意,这是基于在/ usr / local / mysql / current中安装了mysql,您需要编辑适合您系统的路径。

答案 16 :(得分:0)

我努力工作让最后一天得到解决,我终于明白了。我正在运行雪豹,并做了一个新的rails和mysql安装。我使用它的唯一方法是从dmg(而不是macports)安装64位版本的mysql,并在启动时按住“6”和“4”键以64位模式重启我的机器。然后我安装了gem,将我的数据库主机设置为本地,它就像一个冠军。