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

ems*_*son 16 ruby mysql gem rubygems osx-snow-leopard

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

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

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

rake db:migrate 
Run Code Online (Sandbox Code Playgroud)

我明白了:

rake aborted!
uninitialized constant MysqlCompat::MysqlRes

(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

现在看来我的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
Run Code Online (Sandbox Code Playgroud)

这个编译虽然我得到没有文档的定义:

  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
  ...
Run Code Online (Sandbox Code Playgroud)

当我的mysql_config位于正确的位置时,我有点难过:

 /usr/local/mysql/bin/mysql_config
Run Code Online (Sandbox Code Playgroud)

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

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

PS我看到这个上一篇文章未初始化的常量MysqlCompat :: MysqlRes(使用mms2r gem),但它似乎不适用于我的版本.

Ste*_*nin 18

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

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

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
Run Code Online (Sandbox Code Playgroud)


ems*_*son 10

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

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

  1. 在安装Snow Leopard之前,我按照HiveLogic指南编译并安装了我自己的Ruby版本.
  2. 然后我升级到Snow Leopard(它拥有自己的Ruby版本)

这两个版本冲突,意味着当我尝试使用正确的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

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


Ken*_*ang 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"

我有点惊讶#2只是史蒂文·钱宁提到的.

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


Sud*_*hir 6

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

file `which mysql`
file `which ruby`
Run Code Online (Sandbox Code Playgroud)

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