部署 悲催一下午的验证码噩梦

piginzoo · 2012年09月02日 · 最后由 syj121 回复于 2017年02月17日 · 6092 次阅读

周五了,欢天喜地地准备部署一把,周末去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们留个可以参考的文字。

共收到 7 条回复

看来还是Ubuntu靠谱,果断LTS版,不折腾。

一个gem为啥要依赖bundler?

App服务器还是 Ubuntu server 靠谱,追求稳定的话,DB服务器可以考虑CentOS

一下午时间可以把问题解决了也不错,经验和淡定就是这么增长的。

RMagick 在 CentOS 永远是痛

我之前也遇到这个问题,不过我找到不需要编译的方式。

  1. 更新源 sudo rpm -Uvh http://rbel.co/rbel5
  2. 卸载旧版本 sudo yum remove ImageMagick
  3. 安装新版本 sudo yum install ImageMagick.x86_64
  4. 安装开发包 sudo yum install ImageMagick-devel.x86_64

我想给验证码设置时效,该怎么设置?比如,设置1分钟,1分钟后,无论你的验证码和邮箱是否正确,都验证不成功。

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