该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-27
最后修改:2010-03-27
请参考官方的release note http://guides.rails.info/3_0_release_notes.html JavaEye也有一篇介绍Rails 3的 http://www.iteye.com/topic/591833 首先要安装Rails 3.0 beta,ruby的版本是1.8.7和1.9.x都可以,我用的是Ruby Enterprise Edition 1.8.7 安装Rails之前,最好先升级一下rubygem,现在最新的版本是1.3.6 gem update --system 安装Rails 3.0 beta 比较大的变化就是Rails 3.0要依赖比较多的包,这个是Rails核心代码变得简洁带来的变化. 先安装依赖: gem install tzinfo builder i18n memcache-client rack rake rack-test erubis mail text-format thor bundler gem install rack-mount -v=0.4 gem install rails --pre Rails 3.0可以指字使用的测试框架,这次我打算使用Rspec gem install rspec --prerelease gem install rspec-rails --pre 前奏完成,下面开始升级.提示:升级有风险,请自觉备份. 先安装官方的升级插件 cd myapp script/plugin install git://github.com/rails/rails_upgrade.git 根据实际的经验,这个插件做的事情比较有限,经过我大半天的摸索,另外新建一个Rails 3的项目,专门用来拷贝一些Rails 3特有的文件,直接而有效. rails newapp 检查 rake -T rails:upgrade #可以看到升级插件提供的几个rake,用来帮助升级. rake rails:upgrade:check #下面的输入会提醒那些文件将要修改,那些文件使用了旧的api之类的. (in /home/yanghuan/dev/myapp) named_scope is now just scope The named_scope method has been renamed to just scope. More information: http://github.com/rails/rails/commit/d60bb0a9e4be2ac0a9de9a69041a4ddc2e0cc914 The culprits: - /home/yanghuan/dev/myapp/app/models/user.rb - /home/yanghuan/dev/myapp/app/models/book.rb Old Rails generator API A plugin in the app is using the old generator API (a new one may be available at http://github.com/trydionel/rails3-generators). More information: http://blog.plataformatec.com.br/2010/01/discovering-rails-3-generators/ The culprits: - /home/yanghuan/dev/myapp/vendor/plugins/cells/generators/ Old router API The router API has totally changed. More information: http://yehudakatz.com/2009/12/26/the-rails-3-router-rack-it-up/ The culprits: - config/routes.rb Deprecated test_help path You now must require 'rails/test_help' not just 'test_help'. More information: http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices The culprits: - /home/yanghuan/dev/myapp/test/test_helper.rb.rails2 - /home/yanghuan/dev/myapp/test/test_helper.rb New file needed: config/application.rb You need to add a config/application.rb. More information: http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade The culprits: - config/application.rb Old gem bundling (config.gems) The old way of bundling is gone now. You need a Gemfile for bundler. More information: http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade The culprits: /home/yanghuan/dev/myapp/config/environment.rb 备份 rake rails:upgrade:backup #这个rake会备份一些要修改的文件,备份文件以rails2结尾. (in /home/yanghuan/dev/myapp) * backing up app/controllers/application_controller.rb to app/controllers/application_controller.rb.rails2 * backing up app/helpers/application_helper.rb to app/helpers/application_helper.rb.rails2 * backing up config/routes.rb to config/routes.rb.rails2 * backing up config/environment.rb to config/environment.rb.rails2 ...... 配置文件 rake rails:upgrade:configuration #这个rake输出config/application.rb文件的内容,但是不太靠谱,基本上就是把原来environment.rb文件中 Rails::Initializer.run do |config| # 这里的代码会被复制到 config/application.rb # 如果你在这里有config.gem 的配置,在新的config/application.rb文件中要删除掉,会报错的. end #请注意,这个rake只是输入config/application.rb文件的内容,并不会帮你生成这个文件,所以你还要自己手动地新建一个config/applicaton.rb文件,并把刚才的输入复制到进去. #说这个rake生成的内容不靠谱是因为缺少了以下这一段,现在知道为什么要新建一个Rails 3的项目了吧:) require 'rails/all' # Auto-require default libraries and those for the current Rails environment. Bundler.require :default, Rails.env #把这上面这段代码复制到 config/application.rb文件的第2行,第一行是加载boot.rb,不要删除了哦. Gem文件 rake rails:upgrade:gems #输出Gemfile文件的内容,但是要你手动去新建一个Gemfile文件,放在项目的要目录下. #生成的文件大概就是这个样子 (in /home/yanghuan/dev/myapp) # Edit this Gemfile to bundle your application's dependencies. # This preamble is the current preamble for Rails 3 apps; edit as needed. # 下面注释掉的这两行是没用的,输出的内容是没有注释的. #path "/path/to/rails", :glob => "{*/,}*.gemspec" #git "git://github.com/rails/rack.git" gem "rails", "3.0.pre" source 'http://gemcutter.org' gem 'will_paginate', '~> 2.3.11' 路由 rake rails:upgrade:routes #输出新的routes.rb的内容,还是要手动地把这些内容复制到routes.rb中. #生成的文件大概就是这个样子 #(in /home/yanghuan/dev/myapp) Myapp::Application.routes.draw do match '/' => 'books#index' resources :books do resources :briefs resources :diaries end resources :briefs resources :diaries resources :users do resources :briefs resources :diaries end end 还要做的事情 1.缺少了 config.ru文件,请到新项目newapp中复制过来. 2.从新项目newapp中复制environment.rb覆盖旧文件,并修改application的名称 Newapp::Application.initialize! #这里的Newapp就是你的application名了. 3.在initializers文件夹下少了 new_rails_defaults.rb这个文件(这个文件要删除,不然无法启动rails),多了一个 cookie_verification_secret.rb .官方文档的说法是: 引用 The cookie_verifier_secret has been deprecated and now instead it is assigned through Rails.application.config.cookie_secret and moved into its own file:config/initializers/cookie_verification_secret.rb.
4.必须修改 boot.rb 文件(新建一个rails 3的项目,把新生成的复制过去,否则rake会一直报错),同样是要修改application名的,请看第2点. 5.执行 rake rails:update:scripts 用来生成新的rails 命令,更靠谱的做法是把scripts目录删除掉,然后把新项目newapp中整个script复制过来. 6.修改environments目录下的三个文件,这三个文件要这样修改: Myapp::Application.configure do # 原来的代码 end 把上面要做的都做完了, 如果你没有用插件(或者你使用的插件已经支持Rails 3.0 beta了),估计就可以初步地启动服务器了 cd myapp rails server #(或者更简洁的命令: rails s,不要再用script/server了) 在 Is Your Plugin Ready For Rails 3? 和 Rails Wiki 可以看到那些插件支持了Rails 3,你也可以去rubygems.org或者github.com看看,一般支持Rails 3的gem 都是这样安装的 gem install gemname –pre # 当然这个是惯例而已,不作得准的 :) 比如最常用的分页插件will_paginate已经支持Rails 3了,可以这样安装 gem install will_paginate –pre #然后在Gemfile中加上一句: gem 'will_paginate' '3.0.pre' github.com上的分支(比如是支持Rails 3的分支),可以这样安装 script/plugin install git://github.com/mischa/a-repo.git -r branch_name # -r 这个选项同样是适用于svn的. 总结 从release note就可以看到,Rails 3的改变是很大的,这也是我在新项目中打算直接用Rails 3的原因,这次的升级更加坚定了直接上Rails 3的决心 除了升级比较麻烦之外(貌似Rails的升级每次都是伤筋动骨的),Rails 3中很多的代码的写法都不一样了,有些旧的写法甚至不再支持了,比如 named_scope 变成了 scope .在View中的很多help方法都变了,尤其是跟Javascript有关的,如果数量多的话,要改起来真不是一般的有难度啊. 今天这一折腾倒是对Rails 3结构的变化了解得多了一些.今天的升级只涉及到Rails 3的一些结构上的变化,新版本的代码写法有那些变化,暂时还没有折腾,接下来就会尝试写Rails 3的代码,到时再另外写一篇博客说明吧. Rails升级总是让我觉得插件实在是不怎么靠谱,很多都跟不上来,可是不用又不行,真是纠结. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-30
最后修改:2010-03-30
要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。 |
|
返回顶楼 | |
发表时间:2010-03-31
zdmcjm 写道 要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。 对,所以grails永远成为不了rails.每个rails版本的更新都是刻骨铭心的。 |
|
返回顶楼 | |
发表时间:2010-03-31
zdmcjm 写道 要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。 一般Rails正式版放出的时候,都会有一个叫做 rails:update 的rake(或者相关的rake)用来帮助用户升级的,虽然做不到你所说的一个命令就全部搞定,但还是很方便的. 另外,楼上说得对极了,Rails大版本之间的变化是惊天动地的. |
|
返回顶楼 | |
发表时间:2010-03-31
最后修改:2010-03-31
yangzhihuan 写道 zdmcjm 写道 要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。 一般Rails正式版放出的时候,都会有一个叫做 rails:update 的rake(或者相关的rake)用来帮助用户升级的,虽然做不到你所说的一个命令就全部搞定,但还是很方便的. 另外,楼上说得对极了,Rails大版本之间的变化是惊天动地的. 是啰,正因为它不注重向下兼容,所以才会这么cool,哪个特性,新,奇,快,就可考虑加入新版本中。也不是有贬低rails的意思。要是做企业应用的一些管理系统,信息系统,我还是选稍微没这么cool的grails,要是我自己创业,做网站,我会选择rails。 企业应用要求稳定,网站,就追求新,奇,快。 |
|
返回顶楼 | |
发表时间:2010-03-31
Rails一向都是不向下兼容的,这确实是个大问题.
一出新版本,如果你不想升级,一些旧版本的bug,只好自己去修复. zdmcjm 写道 要是做企业应用的一些管理系统,信息系统,我还是选稍微没这么cool的grails,要是我自己创业,做网站,我会选择rails。
企业应用要求稳定,网站,就追求新,奇,快。 zdmcjm 同学很理性嘛 |
|
返回顶楼 | |
发表时间:2010-03-31
Rails和Firefox难道非得整死插件作者不可?
|
|
返回顶楼 | |
发表时间:2010-03-31
我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊
|
|
返回顶楼 | |
发表时间:2010-03-31
hetylei 写道 Rails和Firefox难道非得整死插件作者不可?
+2012 rails升级太复杂,我宁愿重头写一遍 |
|
返回顶楼 | |
发表时间:2010-03-31
t0uch 写道 我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊
难道你觉得beta版的Rails就是一堆错误的吗? |
|
返回顶楼 | |