安装
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/


