我在尝试安装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),但它似乎不适用于我的版本。
答案 0 :(得分:18)
基本上问题是无法找到动态库libmysqlclient。上述解决方案可行,但您需要在重建gem或重新安装新版本的MySQL时重新应用它们。
另一种方法是将包含库的MySQL目录添加到动态加载路径中。将以下内容放在我的.bashrc文件中解决了这个问题:
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
答案 1 :(得分:10)
发生这种情况的原因是我安装了两个版本的Ruby。
这两个版本冲突并且意味着当我尝试使用正确的ARCHFLAGS安装MySQL gem时,系统认为我使用的是不同版本的Ruby。
修复很简单:
使用正确的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)
在与这个问题摔跤了好几天后,我终于把它钉了起来。我做过的两件事让它发挥作用:
我有点惊讶#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 rubygem,同时指定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,将我的数据库主机设置为本地,它就像一个冠军。