16

我在尝试安装 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 我看到了这个之前的帖子未初始化的常量 MysqlCompat::MysqlRes (使用 mms2r gem),但它似乎不适用于我的版本。

4

17 回答 17

18

基本上问题是找不到动态库libmysqlclient。上述解决方案将起作用,但您需要在任何时候重新构建 gem 或安装新版本的 MySQL 时重新应用它们。

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

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
于 2011-03-17T19:40:49.040 回答
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. 导出 DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

我有点惊讶#2 只被 Steven Chanin 提到。

我在 Snow Leopard 上,只安装了 1 个 MySQL (x86_64) 5.5 和 1 个 ruby​​(与 Snow Leopard 一起预打包)。

于 2011-04-17T14:44:23.960 回答
10

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

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

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

这两个版本有冲突,这意味着当我尝试使用正确的 ARCHFLAGS 安装 MySQL gem 时,系统会认为我使用的是不同版本的 Ruby。

修复很简单:

  1. 删除 HiveLogic 版本的 Ruby ( https://content.pivotal.io/blog/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

一旦我这样做了,一切都很好。

于 2010-02-14T16:24:15.790 回答
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 上。

于 2010-04-20T07:42:01.727 回答
2

我已经应用了 hivelogic post的说明,但使用的是 MySQL 5.1.41版本。对于 gem 安装,我做了两件事:

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

事情对我来说很好。

于 2009-12-22T14:23:30.273 回答
2

这里也有同样的问题;已经断断续续地挣扎了两个多星期!

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

我将继续在 Ruby Forge 站点进行调查,看看是否有任何 Ruby Gem 专家可以纠正这个可怕的错误……我需要我的 Rails 工作!时间就是金钱!

所以我在RubyForge Mysql 开发人员错误跟踪页面上报告了这个错误。

我当然希望他们能提供帮助,因为这正在削弱我目前的项目。

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

于 2010-01-19T05:34:55.643 回答
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

希望有帮助!

于 2011-01-18T23:25:28.223 回答
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
于 2010-05-04T15:07:00.490 回答
1

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

于 2011-01-18T01:27:39.443 回答
1

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

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

ps辅助| grep 'mysql'

杀死 [pid_number_for_mysql]

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

于 2011-07-29T05:57:56.073 回答
0

After searching for a long time on solving this particular problem, and trying out all of the above options (and the options on many other sites) without luck, I removed my mysql-5.5 install and installed mysql-5.1. All of a sudden, and with a bit of the above help for compiling 64 bit versions, I finally managed to install a working mysql gem.

So, if you're running into this problem and are running mysql 5.5, try degrading to mysql 5.1.

于 2010-12-21T13:05:47.950 回答
0

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

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

祝您顺利通过此配置 BS 并继续进行一些编码。

于 2010-11-30T05:57:08.213 回答
0

如果有人在 ruby​​ 1.8.7 和 mysql x86(32 位版本)中使用 rvm 并遇到此问题。您会发现此链接很有帮助: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 位。

于 2010-11-18T20:07:53.403 回答
0

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

在多次尝试使用 install_name_tool 修复此问题后,有效的方法是按如下方式更改共享库中的路径,然后重建 mysql 2.8.1 ruby​​gem,同时指定我的:

# 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,您需要编辑路径以适合您的系统。

于 2011-04-19T18:19:42.420 回答
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
于 2010-11-29T06:25:27.937 回答
0

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

于 2010-03-02T00:17:35.027 回答
0

一些问题与过时的或多个冲突的红宝石和宝石二进制文件有关。我自己在尝试使用 ruby​​ 1.9 运行我的代码时,遇到了“透明地”用系统 ruby​​ 编译 mysql gem 的问题。由于这个线程找出问题后,一切都很顺利。

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

似乎使用 RVM 可以帮助避免该线程中的几个问题。

于 2010-05-20T16:06:22.513 回答