分享 艰难搞定 rails 4.0 下 mysql2 驱动

aaronluo · 2013年11月10日 · 最后由 cisolarix 回复于 2014年04月10日 · 11899 次阅读

深深感到年纪大了啊,搞个 rails 4.0 下的 mysql2 驱动搞了我快 4 个小时....也深深感到 rails 这个东西其实不是那么友善,如果想玩还蛮简单,如果用来做事情,我觉得恐怕我的战斗经历要写一大箩筐了.... 先说一下我的开发环境:

* Windows 7 64bit Enterprise * Ruby 2.0.0 * Rails 4.0.0 * MySQL 5.5

在 rails 1.x 时代把玩过一段时间,依稀记得那个时候链接个 mysql 不是那么难....只到昨天晚上我彻底的被打败了....首先不理解 mysql 和 mysql2 这 2 个驱动的区别,不过谷歌一顿之后得到了结论,rails 3.0 之后默认使用 mysql2 驱动;mysql2 驱动有着比 mysql 让人吃惊的性能提高....好吧,就用 mysql2 吧。 在度娘上(抱歉,GFW 限制,只有工作时间可以谷歌)找了几篇排名靠前的帖子,一顿折腾....结果无解....,主要错误有如下几个, 这个错误发生在成功安装了 mysql2-0.3.11-x86-mingw32.gem 之后。度娘很多结果说要用到 0.2.x 的版本就没问题,也有说用 0.3.11 可行的....但是时代是进步的,总不能停留在 0.2.x 版本吧,我不想去尝试安装 0.2.x,所以想解决掉这个 0.3.11 的问题。根据度娘出来的某篇帖子里面说是因为在安装的 mysql2-0.3.11 的 lib 目录下没有 mysql/2.0/mysql2.so 导致的,用 gem 默认安装的只有 1.8 和 1.9...我猜想是支持 Ruby 1.8 和 1.9 版本的....可是我太新潮啊,用了 2.0....同样也不想回退到 1.8 或者 1.9....所以继续找解决方案 上面推论是 0.3.11 的 mysql2 驱动不支持 Ruby 2.0,通过 gem query -r --name-matches="mysql2" -V 命令查看可用的 mysql2 驱动发现有个版本是 0.3.13,应该是最新版本,如果直接 gem install mysql2 会发现是安装这个版本....但是安装会悲剧,出现如下错误..... 谷歌之发现是不能编译 native extension 导致,于是有大神建议安装 DevKit....可是我明明就在安装 rails 的时候安装了 DevKit...因为不安装这个东西,Rails 的 bundle install 总失败啊!!!!真是不友好的 rails!!于是继续谷歌这个问题,有人建议使用-- -- with-opt-dir 参数,并下载 mysql-c-connector 6.02,将参数指定 connector 的解压缩目录....但是这个方法在我这里继续失败,还是无法编译。但是让我发现了另外一个参数----with-mysql-dir...试试这个吧,下面是见证奇迹的时刻 终于安装成功了!!!于是我赶紧尝试 rake db:migrate ....可是你们懂的,哪里那么容易喜剧收尾呢,请继续往下看 Holy 啊,rails 非要用 0.3.11....有大神的帖子说过,可以将 0.3.13 里面的 mysql2.so 拷贝到 0.3.11 下面的 mysql2/2.0/mysql2 下面去(2.0 目录自己创建)但是我还是不想这种打补丁的方式解决问题...既然 rails 不听话,那就告诉它要听话咯,修改 gemfle 这下该行了吧,哈哈,喜剧结尾

还有一点不要忘记了,将 MySQL 安装目录下 lib 目录里的 libmysql.dll 拷贝到 Ruby 安装目录下的 bin 目录里

年纪大了 还不乖。。。ror 还是在 ubuntu、mac 下玩比较好一点。。。。

@aaronluo 难就难在你要用 Windows

最主要的问题是你在 Windows 下折腾 Rails。

这个可能和 windows 关系不大。

在 Linux 下我也遇到过缺少 mysql2.so 的情况。同样是 ruby2 + Rails4。也是通过拷贝 mysql2.so 解决的。

何必呢?装个虚拟机又不是多难的事情

算了,虽然大家都知道 windows 和 度娘 是原罪,但是老人家探索发帖还是值得鼓励,社区要大家的参与

win 下首推 RailsInstaller 会帮你把必要的编译环境配置好,确实是坑,现在 mysql2 还算好编译了,11 年刚接触 rails 的时候我还是手改的 makefile...

其实吧,要是使用 1.9.3 版的 ruby 的话,mysql2-0.3.11-x86-mingw32.gem 这个 gem 是挺顺利在 win 下安装的。我也不知道为什么换成 2.0.0 的 ruby 版本后有很多 gem 就弄不上了,或许是 divkit 的原因

解决并且分享值得鼓励。

最近我也在 windows 上玩 rails,有困难可以交流。。

匿名 #11 2013年11月11日

ruby 跟 rails 本来就是对 linux 更友好,部署的服务器也是 linux,没啥不好的。

让我想到当年一位前同事,在 Windows 的 IIS 上配置 PHP 环境,做 PHP 开发。(我不是要黑大 PHP)

楼主如果知道在 Mac/Linux 搞这些有多简单,会不会改变一下自己的开发环境呢? Anyway,欢迎分享各种折腾经验。

有个成语叫身不由己啊~~Linux 下当然顺手,装虚机那也是分分钟的事情,但是不是,身不由己啊~~

蓦然回首情已远,身不由己在天边,才明白爱恨情仇,最伤最痛是后悔

http://seamon.iteye.com/blog/1144975 献给那些 身不由己的人,向先驱者 致敬

没困难,创造困难也要上。

传送门:http://rubydoc.info/gems/mysql2/0.3.14/frames

当年 win 下面也捣腾过,看来不停的浪费大家都时间啊。 用 Ubuntu 或者 mac 就再也不折腾了。

#16 楼 @shooter 兄弟推荐的这个博客很受用,谢谢

#17 楼 @haohan 官方文档里面的这个 option 用过,没用....必须指向本机安装的 mysql 路径,可能是我环境问题吧

真心不好用。折腾到现在,windows 下不兼容 不方便 是 你的硬伤,何必嘴硬非要限定在 linux 体系下

非常感谢楼主,困扰我多个晚上的问题终于解决了,楼主有一个地方写的不是很明确 gem install mysql2 后边跟的参数 楼主说是在 mysql server 5.5 里,迷惑住我了,我用的 mysql-connector-c-noinstall-6.0.2-win32 这个项目安装成功,用 安装 mysql 数据库的目录 不行。 gem install mysql2 -- '--with-mysql-dir="D:\Ruby\mysql-connector-c-noinstall-6.0.2-win32" 用这个 成功解决问题

感谢楼主给的莫大的支持'

需要 登录 后方可回复, 如果你还没有账号请 注册新账号