`
秦朝古月
  • 浏览: 227578 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

项目中使用的Rails版本升级 2.2.2=>2.3.8

    博客分类:
  • Ruby
阅读更多
项目中使用的Rails版本是2.2.2,想升级到到最新的2.3.8,因此做了相关的调查。调查分两方面进行:一方面是调查Rails的变更履历(在网上可以查到很多,JavaEye新闻就有,就不介绍了);一方面是在安装完Rails 2.3.8后,执行Rake测试(我们的测试Case还是很充分的,代码的覆盖率在90%以上)。

首先,要修改 environment.rb
RAILS_GEM_VERSION = '2.3.8' unless defined? RAILS_GEM_VERSION
require File.join(File.dirname(__FILE__), 'boot')
Rails::Initializer.run do |config|
  ...
  config.action_controller.session = {
    :key => '_quanp_auth_session_id',   # session_key已经不推荐
    :secret => secret
  }
end


rake时发生了下列错误
引用
./test/unit/../test_helper.rb:19: undefined method `use_transactional_fixtures='
for Test::Unit::TestCase:Class (NoMethodError)

Test::Unit::TestCase 已经被要求切换为 ActiveSupport::TestCase。

xxx_controller_test中,又爆出了错误。
引用
NoMethodError: undefined method `get' for #<ServerControllerTest:0x47cc7e4>

需要把 class XXXControllerTest < ActiveSupport::TestCase 改成 class XXXControllerTest < ActionController::TestCase。

ActionController的变化还是蛮大的。
  • 2.2.2中Response继承的是AbstractResponse,Request继承的是AbstractRequest,而2.3.8中Response继承的是Rack::Response,Request继承的是Rack::Request。
  • 2.3.8中,如果要在TestResponse中设定header信息,可以用 @header、headers、header 三种形式,Rack::Response中有 alias :headers, :header 的定义。而2.2.2中可用的 @headers 已经不能用了。
  • ActionController::Base中的assign_default_content_type_and_charset也已经消失,需要改为调用response.assign_default_content_type_and_charset!
  • 2.2.2中如果在action中发生了RuntimeError,response的状态码是0(初始值为nil);而2.3.8中,返回的是200(初始值为200)。

由于我们项目的代码覆写了ActionController中的一些方法,着实费了一番功夫。不过了解到了test执行时的方法调用顺序,总算是有些收获。
当在test中,执行 get :action 的时候,调用顺序如下:
引用
ActionController::TestProcess::get
|- ActionController::TestProcess::process
|  |- ActionController::ProcessWithTest::process_with_test
|  |  |- ActionController::Base::process
|  |  |  |- ActionController::Base::initialize_template_class
|  |  |  |- ActionController::Base::assign_shortcuts
|  |  |  |- ActionController::Base::initialize_current_url
|  |  |  |- ActionController::Base::assign_names
|  |  |  |- ActionController::Base::log_processing
|  |  |  |- send(method, *arguments)
|  |  |  |- ActionController::Base::send_response
|  |  |  |  |- ActionController::Response::prepare!
|  |  |  |  |  |- ActionController::Response::assign_default_content_type_and_charset!
|  |  |  |  |  |- ActionController::Response::handle_conditional_get!
|  |  |  |  |  |- ActionController::Response::set_content_length!
|  |  |  |  |  |- ActionController::Response::convert_content_type!
|  |  |  |  |  |- ActionController::Response::convert_language!
|  |  |  |  |  |- ActionController::Response::convert_cookies!
1
0
分享到:
评论

相关推荐

    rails2.3.8 && ruby1.8.7

    标题中的"rails2.3.8 && ruby1.8.7"指的是Ruby on Rails框架的2.3.8版本和Ruby编程语言的1.8.7版本。Ruby on Rails(通常简称为Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构...

    Rails表单构建器formtastic.zip

    formtastic 是一个Rails表单构建器插件,提供语义丰富和可访问的标记。 示例代码: &lt;%= semantic_form_for @post do |f| %&gt; &lt;%= f.inputs do %&gt; &lt;%= f.input :title %&gt; &lt;%= f.input :body %&gt; &lt;%= f.input :...

    will_paginate 2.2.2

    完成以上步骤后,你就可以在Rails应用中使用`will_paginate`了。 三、基本用法 1. 在模型中: `will_paginate`允许你在查询时直接添加分页参数,例如: ```ruby @posts = Post.paginate(:page =&gt; params[:page], :...

    rails-2.2.2.zip

    Rails 2.2.2 是一个古老的 Ruby on Rails 框架版本,它在2008年发布,标志着Web开发的一个重要里程碑。Ruby on Rails(简称Rails)是由David Heinemeier Hansson创建的开源Web应用程序框架,它遵循模型-视图-控制器...

    ruby1.8.7 & rails2.3.8

    在这个压缩包中,你找到了一个完整的Ruby 1.8.7和Rails 2.3.8的开发环境,这是一套较旧但经典的技术栈,适用于学习历史版本的Rails或者维护旧项目。 标题"ruby1.8.7 & rails2.3.8"指的是这个压缩包的核心内容:Ruby...

    rails-2.3.8.gem

    版本为:rails-2.3.8.gem 可使用指令安装:gem install rails-2.3.8.gem

    Rails2.2.2之windows环境搭建

    在本教程中,我们将深入探讨如何在Windows操作系统上搭建Rails 2.2.2的开发环境。Rails是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,使得Web开发变得更加简洁高效。本文将...

    rails-settings:使用Ruby on Rails管理设置

    Rails的设置 Ruby gem通过将...class User &lt; ActiveRecord xss=removed&gt; { :theme =&gt; 'blue' , :view =&gt; 'monthly' , :filter =&gt; false } s . key :calendar , :defaults =&gt; { :scope =&gt; 'company' } end end

    rails2.3.2 ExceptionNotifier 配置

    标题 "rails2.3.2 ExceptionNotifier 配置" 指的是在Rails 2.3.2版本中,如何设置和使用ExceptionNotifier插件。ExceptionNotifier是Rails的一个非常有用的gem,它允许开发者在应用程序中捕获并通知异常情况,如错误...

    基于Rails2.2.2的ajax

    标题 "基于Rails2.2.2的ajax" 涉及的是使用Rails 2.2.2框架中的AJAX(Asynchronous JavaScript and XML)技术。Rails是一个基于Ruby编程语言的开源Web开发框架,它允许开发者以简洁、高效的方式构建动态网站。在...

    LIGHTTTP配置

    "bin-path" =&gt; "/path/to/rails/application/public/dispatch.fcgi" ) ) ) ``` **2.2.3 Python FastCGI** 对于Python应用,需要使用类似Flup这样的库来创建FastCGI服务器。 **2.3 SSL** Lighttpd也支持SSL加密...

    has-many-through-selection:Rails 5.1示例应用程序,用于使用复选框管理组成员

    在这个Rails 5.1示例应用程序中,我们可以使用一个带有复选框的表单来管理组及其成员。 设置 $ bin/setup $ bin/rails server 描述 我们正在使用Group.accepts_nested_attributes_for :memberships, allow_destroy: ...

    基于Rails2.2.2的自建的CRUD项目视频

    【标题】"基于Rails2.2.2的自建的CRUD项目视频" 在这个项目中,我们将探讨如何使用Ruby on Rails 2.2.2版本构建一个基础的CRUD(创建、读取、更新和删除)应用。Ruby on Rails 是一个流行的开源Web应用程序框架,它...

    ruby on rails 2.2.2 参考手册

    Rails 2.2.2是该框架的一个较早版本,尽管如此,它仍然包含了许多核心概念和技术,对于理解Rails的运作机制及其发展历史非常有价值。 本参考手册是学习Rails 2.2.2的重要资源,特别适合初学者和有一定经验的开发者...

    rails-flog:用于参数和SQL的Rails日志格式化程序

    Rails-flog rails-flog提供了在Rails日志文件... Parameters: {"utf8"=&gt;"✓", "authenticity_token"=&gt;"VYCWAsE+aAN+zSZq2H3ONNqaU8rlyfbnXLfbwDY1i10=", "issue"=&gt;{"is_private"=&gt;"0", "tracker_id"=&gt;"1", "subject"=&gt;

    Secode_level_cache.zip

    现在我们将这个插件从Rails2.x的版本升级到了3.x版本,并且抽取成了一个通用插件,开始应用于新的Rails3.2的项目之上。有志于AR对象缓存优化的ruby程序员不容错过。 使用方法: class User acts_as_cached(:...

    Rails 3中的Active Record的查询变化.doc

    对于查询第一条或最后一条记录,旧的`find(:first, :order =&gt; "published_at desc")`在Rails 3中可以写成`Article.order("published_at desc").first()`,或者考虑到效率和简洁性,可以使用`Article.order(...

    website:结对编程社区站点的原型

    、“自述”、“路由”、“saas”、“设置”、“测试”、“视图”] 首选项:{:git=&gt;true, :apps4=&gt;"rails-bootstrap", :database=&gt;"default", :unit_test=&gt;false, :integration=&gt;false, :fixtures=&gt;false, :frontend=...

Global site tag (gtag.js) - Google Analytics