<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>aaronluo (麦兜的坑)</title>
    <link>https://ruby-china.org/aaronluo</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>艰难搞定 rails 4.0 下 mysql2 驱动</title>
      <description>&lt;p&gt;深深感到年纪大了啊，搞个 rails 4.0 下的 mysql2 驱动搞了我快 4 个小时....也深深感到 rails 这个东西其实不是那么友善，如果想玩还蛮简单，如果用来做事情，我觉得恐怕我的战斗经历要写一大箩筐了....
先说一下我的开发环境：&lt;/p&gt;

&lt;p&gt;* Windows 7 64bit Enterprise
    * Ruby 2.0.0
    * Rails 4.0.0
    * MySQL 5.5&lt;/p&gt;

&lt;p&gt;在 rails 1.x 时代把玩过一段时间，依稀记得那个时候链接个 mysql 不是那么难....只到昨天晚上我彻底的被打败了....首先不理解 mysql 和 mysql2 这 2 个驱动的区别，不过谷歌一顿之后得到了结论，rails 3.0 之后默认使用 mysql2 驱动；mysql2 驱动有着比 mysql 让人吃惊的性能提高....好吧，就用 mysql2 吧。
在度娘上（抱歉，GFW 限制，只有工作时间可以谷歌）找了几篇排名靠前的帖子，一顿折腾....结果无解....，主要错误有如下几个，
&lt;img src="//l.ruby-china.com/photo/2013/c38fbb1734f9abc3918de15b4e5712ce.png" title="" alt=""&gt;
这个错误发生在成功安装了 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 会发现是安装这个版本....但是安装会悲剧，出现如下错误.....
&lt;img src="//l.ruby-china.com/photo/2013/29178a0e982b12dcb9831e51b6ba0956.png" title="" alt=""&gt;
谷歌之发现是不能编译 native extension 导致，于是有大神建议安装 DevKit....可是我明明就在安装 rails 的时候安装了 DevKit...因为不安装这个东西，Rails 的 bundle install 总失败啊！！！！真是不友好的 rails！！于是继续谷歌这个问题，有人建议使用-- -- with-opt-dir 参数，并下载 mysql-c-connector 6.02，将参数指定 connector 的解压缩目录....但是这个方法在我这里继续失败，还是无法编译。但是让我发现了另外一个参数----with-mysql-dir...试试这个吧，下面是见证奇迹的时刻
&lt;img src="//l.ruby-china.com/photo/2013/ef93e04046837c520240000e85ae46ee.png" title="" alt=""&gt;
终于安装成功了！！！于是我赶紧尝试 rake db:migrate ....可是你们懂的，哪里那么容易喜剧收尾呢，请继续往下看
&lt;img src="//l.ruby-china.com/photo/2013/7146ce1b30ce62359ea8bc2b9443d304.png" title="" alt=""&gt;
Holy 啊，rails 非要用 0.3.11....有大神的帖子说过，可以将 0.3.13 里面的 mysql2.so 拷贝到 0.3.11 下面的 mysql2/2.0/mysql2 下面去（2.0 目录自己创建）但是我还是不想这种打补丁的方式解决问题...既然 rails 不听话，那就告诉它要听话咯，修改 gemfle
&lt;img src="//l.ruby-china.com/photo/2013/eb1621a5ce3cf40ba3d371c68d0622b3.png" title="" alt=""&gt;
这下该行了吧，哈哈，喜剧结尾
&lt;img src="//l.ruby-china.com/photo/2013/c9f0f2b159e0bfe9c6e2c905b9ed57ff.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;还有一点不要忘记了，将 MySQL 安装目录下 lib 目录里的 libmysql.dll 拷贝到 Ruby 安装目录下的 bin 目录里&lt;/p&gt;</description>
      <author>aaronluo</author>
      <pubDate>Sun, 10 Nov 2013 21:25:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/15436</link>
      <guid>https://ruby-china.org/topics/15436</guid>
    </item>
  </channel>
</rss>
