如果直接用gem,没什么好说的,直接gem install
但是,我选择的安装方式是:freeze,理由如下:
1 我机器上有多个rails项目,我只想让其中的一个升级到rails2.1,不想影响其他的项目。
2 我的团队成员他们都没有装rails2.1,直接gem install是很慢很慢地。
所谓的freeze,就是讲rails某个版本拷贝到项目下的vendor目录。以保证外部的rails gems不会影响到本项目。
好,开始。
首先,rake rails:freeze:gems
控制台出错:
uninitialized constant Gem::GemRunner
哦,google一下,发现rubyforum上有讨论,但最后不了了之。
自己hack喽。
加上--trace参数
uninitialized constant Gem::GemRunner D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:2237:in `const_missing' D:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.0/lib/tasks/framework.rake:26 D:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.0/lib/tasks/framework.rake:25:in `each' D:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.0/lib/tasks/framework.rake:25
于是定位到framework.rake,在require 'rubygems'(line 6)后面 加入:
require 'rubygems/gem_runner'
搞定!
接着运行 rake rails:freeze:gems
又出现另外一个问题:
Freezing to the gems for Rails 2.1.0 Unpacked gem: 'D:/dev/one/vendor/rails/activesupport-2.1.0' Unpacked gem: 'D:/dev/one/vendor/rails/activerecord-2.1.0' Unpacked gem: 'D:/dev/one/vendor/rails/actionpack-2.1.0' Unpacked gem: 'D:/dev/one/vendor/rails/actionmailer-2.1.0' Unpacked gem: 'D:/dev/one/vendor/rails/activeresource-2.1.0' Unpacked gem: 'D:/dev/one/vendor/rails/rails-2.1.0' rake aborted! Permission denied - rails-2.1.0 or railties D:/ruby/lib/ruby/1.8/fileutils.rb:505:in `rename'
先不管,运行 script/server再说
说找不到railties这个目录。
晕倒
直接把 vendor/rails/rails-2.1.0修改为 railties
一切OK了。
总结下来:
1 在framework.rake添加 require 'rubygems/gem_runner'
2 将目录rails-2.1.0修改为 railties