论坛首页 编程语言技术论坛

Rails2.1 升级历险 [持续更新中~~]

浏览 3510 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-08-06  
注意:项目刚刚升级到rails2.1,问题持续发现中~~~~~~

如果直接用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


   发表时间:2008-08-06  

又有一个问题:will_paginate在has_many中,无法使用

SystemStackError: stack level too deep
        from D:/dev/one/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:86:in `method_missing_without_paginate'
        from D:/dev/one/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:87:in `method_missing'
        from (irb):1
 

原因是,rails2.1重构了AssociationProxy模块,将 HasManyThroughAssociation修改为AssociationCollection的子类。

而按照will_paginate在enable_activerecord中的做发,它将HasManyThroughAssociation hack了两遍。所以会出现这个问题。

解决办法:

 

 plugin/update不管用,因为rubyforge上很多插件都转到git上了,所以你需要从github上下载最新的版本,

 

连接:http://github.com/mislav/will_paginate/tree/master

0 请登录后投票
   发表时间:2008-08-06  
我觉得github上面直接下载某一分支的压缩包的服务挺好的,我就是直接下的rails2.1的tgz包直接解压缩到vendor/rails。
0 请登录后投票
   发表时间:2008-08-06  
dazuiba 写道

又有一个问题:will_paginate在has_many中,无法使用

SystemStackError: stack level too deep
        from D:/dev/one/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:86:in `method_missing_without_paginate'
        from D:/dev/one/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:87:in `method_missing'
        from (irb):1


原因是,rails2.1重构了AssociationProxy模块,将 HasManyThroughAssociation修改为AssociationCollection的子类。

而按照will_paginate在enable_activerecord中的做发,它将HasManyThroughAssociation hack了两遍。所以会出现这个问题。

解决办法:


plugin/update不管用,因为rubyforge上很多插件都转到git上了,所以你需要从github上下载最新的版本,


连接:http://github.com/mislav/will_paginate/tree/master



will_paginate 的最新版本推荐用 gem 安装。
0 请登录后投票
   发表时间:2008-08-07  
花花公子 写道
我觉得github上面直接下载某一分支的压缩包的服务挺好的,我就是直接下的rails2.1的tgz包直接解压缩到vendor/rails。

git的出现,确实方便了很多开发者。但是从另外一个角度:gem都是集中存放在rubyforge而不是github上。所以rubyforge依然会成为发布gem的不二之选。

 

Gem install 的--source选项就像一个鸡肋

 

http://judofyr.net/posts/dont-forget-about-rubyforge.html

0 请登录后投票
   发表时间:2008-08-07  
git 没有海龟壳的话在Windows中很不方便,各大IDE集成了对git支持没?
0 请登录后投票
   发表时间:2009-07-17  
啊。最近刚遇到一个问题,就是lz所说的,要是早找到多好!
0 请登录后投票
   发表时间:2009-07-17  
花花公子 写道
我觉得github上面直接下载某一分支的压缩包的服务挺好的,我就是直接下的rails2.1的tgz包直接解压缩到vendor/rails。

感觉 rails:freeze:gems 就是将系统的rails拷贝到vendor

0 请登录后投票
   发表时间:2009-07-18  
RAILS版本的升级确实很让人头疼,插件太多
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics