周五了,欢天喜地地准备部署一把,周末去 High 了。在内网的模拟生产环境的服务器 capstrano 一把,过了,于是,淡定地敲出线上的 cap 命令,回车后,就尿尿去了。
回来后,挂了,倒也没有惊慌,看看呗:
** [out :: paozhoumo.com] Bundler could not find compatible versions for gem "bundler":
** [out :: paozhoumo.com] In Gemfile:
** [out :: paozhoumo.com] easy_captcha (>= 0) ruby depends on
** [out :: paozhoumo.com] bundler (>= 1.1.0) ruby <========================
** [out :: paozhoumo.com]
** [out :: paozhoumo.com] Current Bundler version:
** [out :: paozhoumo.com] bundler (1.0.22)<===========================
** [out :: paozhoumo.com]
** [out :: paozhoumo.com] This Gemfile requires a different version of Bundler.
** [out :: paozhoumo.com] Perhaps you need to update Bundler by running `gem install bundler`?
“easy_captcha”!是验证码的问题,这个是@jungledrum找的 Gem,挺好用的,于是问了@jungledrum鼓鼓,鼓鼓说,这个 Gem 有点问题,对 bundler 的依赖必须是~>1.0.0,于是他 fork 了一份,改成了 1.1.x,挺赞啊,我想,可是为什么服务器上 bundler 是 1.0.22 呢,于是查查,发现我们这台 2 月份搞来的盛大云主机,是 centos5.4 的,当时安装的 rails 环境的 bundler 就是 1.0.22。好嘞!原因找到,就解决呗。淡定的我,还丝毫意识不到,噩梦才刚刚开始。
先搞搞 gem 吧,解决 bundler 版本问题,gem install bundler,好啦,升级了 bundler,继续 cap。几分钟的煎熬后,新问题又出来了,发现 easy_captcha 需要依赖于 rmagick, rmagick gem 安装又失败泪:~(
Installing rmagick (2.13.1) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
**checking for ImageMagick version >= 6.4.9... no<======================
Can't install RMagick 2.13.1. You must have ImageMagick 6.4.9 or later.
什么!需要 ImageMagick 的版本大于 6.4.9,我勒个去!赶紧 check 了一下服务器上的 ImageMagick, yum 支持的是"6.2.8.0",啊,顿时就慌乱了,肿么办?肿么办? easy_captcha0.5.0--->rmagic 2.13.1---->ImageMagick6.5.9, 我靠,我的 CentOS5.4 推荐的兼容版本是 6.2.8 啊?!
来吧,自己搞个版本吧,我下定决心,去下来 ImageMagick 的 source,make install 了一把,嘿,ImageMagick 现在 6.7.9 了,安装完毕后,洋洋得意地我,准备继续 bundle install 一把,果然,版本校验过了,可是新问题又出来了,编译 RMagick 的时候,居然说找不到 Magick 的头文件:
/usr/bin/ruby1.8 extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no<============================
Can't install RMagick 2.13.1. Can't find MagickWand.h.
噢的神哪,怎么又找不到头文件了呢?于是,我 ln 了所以可能需要的 header 文件和目录,靠,都是错误依旧。绝望了,绝望之余,去拜股沟大神,终于找到了救命贴: http://superuser.com/questions/163818/how-to-install-rmagick-on-ubuntu-10-04 于是,噼里啪啦地一通乱敲后,居然搞定了:
/sbin/ldconfig /usr/local
ln -f /usr/local/bin/Magick-config /usr/bin/Magick-config
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ gem install rmagick
至此,这条生死链终于打通了:easy_captcha0.5.0--->rmagic 2.13.1---->ImageMagick6.5.9。回味之余,参考帖子:http://ruby-china.org/topics/772@user3的github,又去掉了了 fork,改用了原作者的 source link::git => 'https://github.com/phatworx/easy_captcha.git',至此,完美解决。
另,中途遇到一些 so 的链接和加载问题,如“libMagickCore.so.5: cannot open shared object file”参考帖子http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17059 都一一解决。
注:关于 ldconfig: http://www.xxlinux.com/linux/article/accidence/technique/20081230/14754.html
总结一下吧:
因缘,因是悲催的 CentOS5.4,老点,引起版本的问题。 感叹:部署是个恼人的事,版本的依赖管理是个噩梦。
特发此帖,以对逝去的一下午时间的深深惋惜,也为自己留个笔记,也为遇到类似问题的 XDJM 们留个可以参考的文字。