事情的起因是,上个星期,想装rails来玩玩。gem install rails轻松装了rails,建立了个demo的project,等到我执行

rake db:create RAILS_ENV='development'

马上蹦出来错误说rails需要rubygems的版本大于1.3.2,而我的rubygems版本是1.3.1。

怎么办,装个旧版本的rails?我一开始也是这么想的,rails卸了再装,都试到2.1.x的去了,就是不行。rake也降级使用,还是不行。天杀的,难道rails出来第一条rubygems已经到1.3.2去了?明显是不可能的,但是我也没心思仔细去琢磨到底是为什么。

升级系统的rubygems,确实很简单

sudo gem update --system 

一句话就可以做到,但是我不想这么做,因为rubygems现在是在ruby 1.9的那个包里面的,我不想把系统弄得一团糟。网上的讨论对于ruby 1.9自带一个过时的gem系统也很有微词,但是没办法,开发组那边似乎不care……最新的rubygems,已经是1.3.7了,我也闹不清他们为什么在加入ruby官方软件包之后还开发得这么带劲,这明显是会给社区带来版本兼容性的问题的……….

以上都是废话,可以不看

RVM就是为了解决这种问题的。rvm,大概是ruby version manager的简称,让你简单的管理多个版本的ruby,让我想起了modules

安装很简单(就是装完了在Archlinux下不能玩):

gem install rvm
rvm-install

这样就好了!会提示你要把一段代码加到你的.bashrc最后的,我加到.zshrc最后了。其实是rvm这个shell函数的定义。

安装不自带rubygems的ruby 1.8.7

rvm install 1.8.7

…..编译不能通过。以为是rvm不够新,那用这个命令抓最新的rvm回来!

rmv update --head

再编译ruby 1.8.7,…………..还是不能通过(我的思路一定有问题)。去看看那make.error.log,一个openssl相关的错误,google都不知道为什么。

灵光一动,去翻archlinux的ruby的PKGBUILD,原来有个openssl 1.0的补丁!原来ruby不能跟这高级的openssl 1.0一块编的,要打补丁…..

现在的问题是怎么打了,因为用的是rvm。几番鼓捣下,在~/.rvm/src里面找到了源代码目录,打上补丁,终于装上了ruby 1.8.7。

接下来便是

rvm --default ruby-1.8.7-p249
rvm gem install rails
rvm gem install sqlite3-ruby    (sqlite3这个gem是给ruby 1.9用的!)

然后,再回到我的项目目录,执行rake命令,什么回显也没有,成功了!