26th Feb, 2010

升级到Rails 3 Beta

安装


gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
gem install rails --pre

这里会遇到一个rack-mount依赖问题,可以通过手动安装0.4.0版的rack-mount解决:

sudo gem install rack-mount -v=0.4.0

升级应用

rails_upgrade(http://github.com/rails/rails_upgrade)是Rails官方的Rails3升级辅助插件,它提供了几个Rake任务帮助你轻松完成升级。

1. 执行 rails:upgrade:backup 备份会被Rails 3覆盖的文件,比如:application_controller.rb会被重命名为application_controller.rb.rails2
2. 执行 rake rails:upgrade:routes 生成Rails 3格式的routes.rb,以及rake rails:upgrade:gems生成新的Gemfile
3. 在你的程序目录执行: rails . 注意不要覆盖routes.rb和Gemfile

接下来要做的就是将备份的rails2文件合并到新生成的文件中,再次启动应用,如果幸运的话,你的应用现在已经运行在Rails 3 beta上了,注意检查Log中的Deprecated Warning,并将其替换为Rails 3的方式,关于Rails 3的新特性请参看Release Notes:http://guides.rails.info/3_0_release_notes.html

ActionView

Rails 3重写了View Helper,并作废了以前的link_to_function, link_to_remote, remote_form_for等AJAX Helper,而改为为link_to, form_for增加:remote => true来实现。

link_to_function(text, function) => link_to(text, ‘#’, function)
link_to_remote(text, {:url => url}) => link_to(text, url, :remote => true)
remote_form_for(object) => form_for(object, :remote => true)

Passenger

Passenger从2.2.9版本开始支持Rails 3,如果你的版本小于2.2.9,请先升级,另外需要注意的是,Rails 3会在你的应用目录下创建一个config.ru文件,如果需要以development模式运行你的应用,需要做点改变:

1. 在你的apache配置中加入: RackEnv development
2. 删除config.ru,这样passenger会继续使用RailsEnv

jQuery

Rails 3默认是使用Prototype的,如果要使用jQuery,jquery-ujs(http://github.com/rails/jquery-ujs.git)项目提供了jQuery版本的rails.js,下载并替换默认的rails.js,然后在 application.html.erb的head部分增加:


<meta name="csrf-token" content="<%= form_authenticity_token %>" />
<meta name="csrf-param" content="authenticity_token" />

Paperclip

Paperclip目前还不支持Rails 3,不过Github上已经有了一个Rails 3的分支,我们可以直接使用这个分支:


git submodule add -b rails3 git://github.com/thoughtbot/paperclip.git vendor/plugins/paperclip
git submodule init

但是这个分支目前工作也不正常,还需要打一个补丁:


# in lib/paperclip/attachment.rb at line 293
def callback which #:nodoc:
  # replace this line...
  # instance.run_callbacks(which, @queued_for_write){|result,obj| result == false }
  # with this:
  instance.run_callbacks(which, @queued_for_write)
end

此处参考:http://jameswilding.net/2010/02/07/paperclip-on-rails-3-beta/

评论

paperclip 可以使用 gem “paperclip”, :git => “git://github.com/JasonKing/paperclip.git”, :branch => ‘rails3′

JasonKing已经做好全部补丁了,我测试了一切正常

还没有使用过Rails 3呢,先继续观望一段时间,

留条评论?

Your response:

Categories