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

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

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

看来还是 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 分钟后,无论你的验证码和邮箱是否正确,都验证不成功。

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