`
yangzhihuan
  • 浏览: 168672 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

从Rails 2.3.5 升级到 Rails 3.0 beta

阅读更多
因为有一个新的项目打算使用Rails 3.0 beta,所以先试试从Rails 2.3.5升级到Rails 3.0 beta.

请参考官方的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升级总是让我觉得插件实在是不怎么靠谱,很多都跟不上来,可是不用又不行,真是纠结.


分享到:
评论
16 楼 cinic2003 2010-09-13  
不知道有没有人在升级rails3的时候,怎么处理restful_authentication这个插件的,好像还没有rails3的版本的
15 楼 everher 2010-05-17  
什么样的应用需要Rails,而且还要用beta版本的rails
14 楼 t0uch 2010-04-06  
这个rails3要用1.9.2的ruby,要等这东西release了才能稳定使用到生产环境吧。这下估计要到圣诞节了。除非1.8.7的改掉那几个bug。
13 楼 yangzhihuan 2010-04-03  
<p>Rails 3.0 beta 2 发布了 <a title="Rails 3.0 beta 2 发布了 http://weblog.rubyonrails.org/2010/4/1/rails-3-0-second-beta-release " href="http://Rails%203.0%20beta%202%20%E5%8F%91%E5%B8%83%E4%BA%86%20http//weblog.rubyonrails.org/2010/4/1/rails-3-0-second-beta-release%20">http://weblog.rubyonrails.org/2010/4/1/rails-3-0-second-beta-release </a></p>
<p> </p>
12 楼 yangzhihuan 2010-04-02  
t0uch 写道
yangzhihuan 写道
t0uch 写道
我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊


难道你觉得beta版的Rails就是一堆错误的吗?


并不是这个意思。难道你不害怕用到一定程度的时候发现一个问题,搞了一周才发现是rails本身的问题,这样一种情况出现?


对于这个问题,我想反问一个经典的问题,有那个软件是可以保证完全没有bug的呢?

我认为beta的版本只是没有经过严格的测试,另外beta标志着不稳定,api有可能会改变.

使用beta版本相对来说,风险肯定大一点,但是我觉得从2.3.5升级到3.0要花的功夫更大,这正是我选择3.0beta的理由.
11 楼 t0uch 2010-04-02  
yangzhihuan 写道
t0uch 写道
我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊


难道你觉得beta版的Rails就是一堆错误的吗?


并不是这个意思。难道你不害怕用到一定程度的时候发现一个问题,搞了一周才发现是rails本身的问题,这样一种情况出现?
10 楼 hu7363 2010-04-01  
我觉得Rails 3比起以往的变动都要更刻骨铭心,这个架构可以躺在上面很长一段时间。
9 楼 yangzhihuan 2010-03-31  
t0uch 写道
我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊


难道你觉得beta版的Rails就是一堆错误的吗?
8 楼 司徒正美 2010-03-31  
hetylei 写道
Rails和Firefox难道非得整死插件作者不可?

+2012
rails升级太复杂,我宁愿重头写一遍
7 楼 t0uch 2010-03-31  
我比较感兴趣的是什么项目可以用beta版的rails去跑?万一两个月后还没有release,项目还是要上的啊
6 楼 hetylei 2010-03-31  
Rails和Firefox难道非得整死插件作者不可?
5 楼 yangzhihuan 2010-03-31  
Rails一向都是不向下兼容的,这确实是个大问题.
一出新版本,如果你不想升级,一些旧版本的bug,只好自己去修复.

zdmcjm 写道
要是做企业应用的一些管理系统,信息系统,我还是选稍微没这么cool的grails,要是我自己创业,做网站,我会选择rails。
企业应用要求稳定,网站,就追求新,奇,快。


zdmcjm 同学很理性嘛 
4 楼 zdmcjm 2010-03-31  
yangzhihuan 写道
zdmcjm 写道
要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。


一般Rails正式版放出的时候,都会有一个叫做 rails:update 的rake(或者相关的rake)用来帮助用户升级的,虽然做不到你所说的一个命令就全部搞定,但还是很方便的.

另外,楼上说得对极了,Rails大版本之间的变化是惊天动地的.


是啰,正因为它不注重向下兼容,所以才会这么cool,哪个特性,新,奇,快,就可考虑加入新版本中。也不是有贬低rails的意思。要是做企业应用的一些管理系统,信息系统,我还是选稍微没这么cool的grails,要是我自己创业,做网站,我会选择rails。
企业应用要求稳定,网站,就追求新,奇,快。
3 楼 yangzhihuan 2010-03-31  
zdmcjm 写道
要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。


一般Rails正式版放出的时候,都会有一个叫做 rails:update 的rake(或者相关的rake)用来帮助用户升级的,虽然做不到你所说的一个命令就全部搞定,但还是很方便的.

另外,楼上说得对极了,Rails大版本之间的变化是惊天动地的.
2 楼 amonlei 2010-03-31  
zdmcjm 写道
要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。

对,所以grails永远成为不了rails.每个rails版本的更新都是刻骨铭心的。
1 楼 zdmcjm 2010-03-30  
要是大规划的企业级应用,经得起这玩意的折腾吗?
我知道grails的升级,基本上一个upgrade命令足矣。

相关推荐

    ruby on rails 2.3.5 api html版

    Ruby on Rails 2.3.5 API HTML版是针对该版本框架的重要开发参考资料,...不过要注意,Rails框架已经发展到更高的版本,新版本可能引入了更多的改进和最佳实践,因此在实际项目中,考虑升级到最新稳定版本也是必要的。

    rails 2.3.5开发就业指导中心网站部分记录

    标题 "rails 2.3.5开发就业指导中心网站部分记录" 暗示了我们将会探讨使用Rails 2.3.5版本进行Web开发的相关技术。Rails是Ruby的一个框架,用于构建动态、数据驱动的Web应用。在这个特定的项目中,它被用来创建一个...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及以上版本,并与MySQL进行无缝对接。 首先,我们需要安装Ruby for Windows。你可以从RubyForge网站上下载最新的One-Click Installer版本,...

    rails-2.3.5.gem

    rails-2.3.5.gem redmine必须gem

    Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0)

    在“Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0)”中,包含了Rails从3.0到4.0各个主要版本的源代码,这些版本的变迁反映了Rails框架在不同阶段的发展和改进。 1. Rails 3.0: Rails 3是重大升级,引入了...

    wize_upgrader:从 rails 3.2 升级到 rails 4 的快速而肮脏的宝石

    我们必须将一堆应用程序从 Rails 3.2 升级到 Rails 4。我们构建了这个 gem 来提供帮助。 注意:我们的大多数应用程序都很简单,但这应该可以处理 95% 的情况。 入门 $ gem install wize_upgrader 从 Rails 应用...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **升级**:当需要更新到Rails的最新版本时,可以使用`bundle update rails`命令来更新依赖。 - **回滚**:如果更新后出现问题,可以通过`git`命令或者手动修改`Gemfile`来回滚到之前的版本。 #### 六、添加第二个...

    Rails项目源代码

    Rails的路由系统将URL映射到控制器的行动上,如`/sign_up`可能对应`users#new`,用于创建新用户。`config/routes.rb`文件定义了所有路由规则,包括资源路由、命名路由和自定义路由。 6. **视图模板**: 视图使用...

    Rails101_by_rails4.0

    为了确保读者能够通过实践加深理解,书中还安排了一系列练习作业,从最基础的“Hello World”开始,逐步过渡到更复杂的概念,如Rails的Routing(路由)机制。路由机制是Web应用中一个非常核心的概念,它定义了不同的...

    Agile Web Development With Rails 3rdEdition Beta

    - 本书详细讲解了如何使用Rails进行Web应用的开发,从基础环境搭建到高级特性如测试、部署、性能优化等均有涉及。 - 深入探讨了MVC架构下的各种模式,如ActiveRecord、ActiveSupport等,以及如何利用Rails的内建...

    Agile Web Development with Rails 3nd Edition Beta.pdf

    值得注意的是,尽管许多章节的内容已经更新,但其中的一些截图尚未同步更新到Rails 2.1所呈现的结果。 Rails核心团队仍在持续改进Rails 2。随着时间推移,新发布的版本可能会引入与先前版本不兼容的变更。为了探索...

    Agile Web Development with Rails 3nd Edition Beta

    《敏捷Web开发:Rails 3版(Beta)》是一本深度探讨使用Ruby on Rails框架进行高效Web应用开发的专业书籍。本书旨在帮助开发者掌握敏捷开发方法,并利用Ruby on Rails的灵活性和强大功能,快速构建功能丰富的互联网...

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的...通过这个过程,开发者不仅可以学习到Rails的基本用法,还能掌握Web开发的通用实践和敏捷开发理念。

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer ...同时,也可以学习到 Ruby、Rails 和 Mongrel 的基本概念和使用方法。

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    rails 3 upgrade handbook(simple樣例)

    本手册是一份详尽的指南,旨在帮助开发者顺利完成从旧版本Rails到Rails 3的升级过程。手册共包含近120页的内容,覆盖了升级过程中所需的所有关键信息。 #### 二、Rails 3的新特性概述 在升级之前,了解Rails 3引入...

    rails2-sample

    本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是学习Ruby on Rails的理想选择。 ### 重要知识点概览 #### 1. Introducing Ruby on Rails(介绍Ruby on Rails) 这一章节...

    Ruby on Rails入门例子

    - **路由(Routes)**:Rails的路由系统将URL映射到特定的控制器动作,定义了应用的导航结构。在`config/routes.rb`文件中配置路由规则。 - **生成器(Generators)**:Rails提供了强大的生成器工具,可以自动生成...

Global site tag (gtag.js) - Google Analytics