阅读更多

23顶
0踩

编程语言

原创新闻 Ruby on Rails 2.2 发行公告

2008-10-25 23:02 by 见习编辑 robbin 评论(6) 有9370人浏览
Ruby on Rails 2.2版本是Rails一次大的版本升级,相当于Rails1.1到Rails1.2的飞跃,或者相当于Rails1.2到Rails2.0这样的版本飞跃,包括了一些意义重大的功能,因此JavaEye将Ruby on Rails 2.2官方的Release Notes简要的翻译和点评。原文在:http://guides.rubyonrails.org/2_2_release_notes.html

1. 基础设施(Infrastructure)

1.1. 国际化(Internationalization)

Rails 2.2提供了一套简单的国际化设施,该设施是由Rails i18n团队开发的,更多信息请看:
Official Rails i18 website
Finally. Ruby on Rails gets internationalized
Localizing Rails : Demo application

1.2. Ruby 1.9和JRuby的兼容性

除了Rails2.2已经是线程安全这个改动之外,Rails也做了其他大量改动,以便于Rails可以更好的运行在即将发布的Ruby 1.9和JRuby上面。

2. 文档指南

Rails源代码里面的注释文档已经很丰富了,除此之外,我们推出了Rails官方文档指南网站:Ruby on Rails Guides,目前文档指南已经包括以下部分:
引用
Getting Started with Rails
Rails Database Migrations
Active Record Associations
Active Record Finders
Layouts and Rendering in Rails
Action View Form Helpers
Rails Routing from the Outside In
Basics of Action Controller
Rails Caching
Testing Rails Applications
Securing Rails Applications
Debugging Rails Applications
Benchmarking and Profiling Rails Applications
The Basics of Creating Rails Plugins


总得来说,文档指南为Rails初学者和中级水平的开发者提供了成千上万的文档。如果你想在本地生成这些文档,只需要执行命令:

rake doc:guides


就可以了。将会在你的Rails应用的RAILS_ROOT/doc/guides目录下面创建全套的文档指南,然后你可以直接用浏览器打开RAILS_ROOT/doc/guides/index.html这个网页,来阅读指南。

3、更加优秀的HTTP集成功能: 唾手可得的ETag功能

Rails提供了对HTTP头信息的etag和last modified的功能,意味着当浏览器再次读取同一个URL的时候,如果服务器页面没有发生改变,那么Rails可以直接返回“304 Not Modified”头信息,而不必返回任何页面。这个功能实际上是基于Rails REST架构上的HTTP缓存支持。下面看个例子:
class ArticlesController < ApplicationController
  def show_with_respond_to_block
    @article = Article.find(params[:id])
    if stale?(:last_modified => @article.published_at.utc, :etag => @article)
      respond_to do |wants|
        # normal response processing
      end
    end
  end

  def show_with_implied_render
    @article = Article.find(params[:id])
    fresh_when(:last_modified => @article.published_at.utc, :etag => @article)
  end
end


当浏览器第一次访问的时候,Rails会用文章发布时间作为HTTP响应的Last Modified,用文章的ID作为etag发送给浏览器,那么当浏览器收到HTTP响应以后,就会记录下来。Rails发送的HTTP响应的头信息类似下面这样的格式:

Last-Modified	Fri, 24 Oct 2008 15:40:25 GMT
Etag	"2502585412"



当浏览器再次访问同一个URL的时候,浏览器就会在HTTP请求的头信息里面携带如下信息发送给服务器:

If-Modified-Since	Fri, 24 Oct 2008 15:40:25 GMT
If-None-Match	"2502585412"


Rails就会收到这些信息,如果文章的ID和文章的发布时间没有被改变的话,那么Rails就不会去渲染模板和发送页面内容,而是直接发送一个HTTP响应的头信息:“304 Not Modified”给浏览器。浏览器收到304响应以后,就会直接读取浏览器本地的缓存页面。

因此这个功能意味着:Rails可以对动态页面实施HTTP协议级别的缓存功能,只要URL代表的资源没有发生状态改变,那么浏览器甚至都不会去服务器端下载页面。这是一种极其高明的缓存策略,不但可以减轻服务器端负载,甚至可以减轻网络带宽。

4. 线程安全(Thread Safety)

Rails2.2已经是线程安全的了。在Web服务器的支持下,你可以以多线程方式运行Rails,这样可以提高性能,节省内存。在服务器生产环境下打开多线程模式,要在config/environments/production.rb文件当中加入如下配置:

config.threadsafe!


更多信息请看:
Thread safety for your Rails
Thread safety project announcement
Q/A: What Thread-safe Rails Means


5. Active Record

ActiveRecord有两大值得一提的新功能:带事务支持的数据库迁移和数据库连接池。此外还有一些小的改进。

5.1. 带事务支持的数据库迁移功能(Transactional Migrations)

以往,数据库迁移的多步操作往往会有问题,如果中间某个步骤出问题,是无法回滚的,而且版本号也被改变了。这意味着你无法简单的通过rake db:migrate:redo命令回滚到出错前的版本。带事务支持的数据库迁移通过在一个DDL事务当中封装迁移步骤解决了这个问题。不过在Rails2.2当中,这个功能仅仅对PostgreSQL数据库生效。在将来,该功能还会提供对其他数据库的支持。

更多信息请看:DDL Transactions

5.2. 数据库连接池(Connection Pooling)

数据库连接池的作用就不用介绍了。Rails默认创建5个数据库连接,不过你也可以在database.yml里面通过pool这个参数来修改。此外还有一个wait_timeout参数,用来设置连接超时。另外你还可以用ActiveRecord::Base.connection_pool调用来直接操作连接池。下面是一个示例:

development:
  adapter: mysql
  username: root
  database: sample_development
  pool: 10
  wait_timeout: 10


更多信息请看:What's New in Edge Rails: Connection Pools


5.3 表连接的Hash参数(Hashes for Join Table Conditions)

可以对表连接的查询条件使用hash参数,这对于复杂的表连接查询来说很有帮助:

class Photo < ActiveRecord::Base
  belongs_to :product
end

class Product < ActiveRecord::Base
  has_many :photos
end

# Get all products with copyright-free photos:
Product.all(:joins => :photos, :conditions => { :photos => { :copyright => false }})


更多信息请看:What's New in Edge Rails: Easy Join Table Conditions

5.4. 新的动态查询方法(New Dynamic Finders)

5.4.1. 查找最后一条符合条件的记录(find_last_by_<attributes>)

# Get the last user who signed up from London
User.find_last_by_city('London')


5.4.2. 查找不符合条件的记录(find_by_<attributes>!)

# Raise ActiveRecord::RecordNotFound exception if 'Moby' hasn't signed up yet!
User.find_by_name!('Moby')


5.5. 禁止对关联对象私有方法的访问

从Rails2.2开始,对于model的关联对象的私有方法,禁止直接调用。这个没什么可说的。


5.6. 其他方面的更改


1、rake db:migrate:redo可以接受一个VERSION指定回滚到哪个版本
2、config.active_record.timestamped_migrations = false可以指定数据库迁移的版本号使用数字,而不是UTC时间戳
3、Counter cache字段不用显式初始化为0
4、ActiveRecord::Base.human_name可以使用i18n进行本地化语言了


6. Action Controller

6.1. 减轻路由的嵌入深度

基于资源的路由如果有深度嵌入的话,那么URL就会很长,如果在URL上面不会引起
歧义的话,那么可以去掉多层嵌套。例如:

map.resources :publishers, :shallow => true do |publisher|
  publisher.resources :magazines do |magazine|
    magazine.resources :photos
  end
end


将产生如下路由:

/publishers/1           ==> publisher_path(1)
/publishers/1/magazines ==> publisher_magazines_path(1)
/magazines/2            ==> magazine_path(2)
/magazines/2/photos     ==> magazines_photos_path(2)
/photos/3               ==> photo_path(3)


magazine资源不必非要写在publisher后面了。

更多信息请看:
Rails Routing from the Outside In
What's New in Edge Rails: Shallow Routes

6.2. 路由可以指定协议集合(Method Arrays for Member or Collection Routes)

map.resources :photos, :collection => { :search => [:get, :post] 

}

search方法可以同时被GET和POST所使用。

6.3. Action Controller其他更改

1、当出现路由无法解析的URL时候,可以自定义错误页面

2、根据HTTP Accept选择render格式的功能默认是关闭的,不过你可以通过配置打开:config.action_controller.user_accept_header = true

3、对于Action的执行时间的统计精确到毫秒数,而不是以前的秒数。

4、Rails现在支持了HTTP-only cookies,可以帮助消除一些跨站点脚本攻击。


7. Action View

1、javascript_include_tag和stylesheet_link_tag现在支持一个:recursive参数,当指定为:all的时候可以自动加载整个目录数下面的文件。
2、Prototype javascript库升级到1.6.0.2版本
3、RJS#page.reload通过JS来刷新浏览器当前地址
4、atom_feed helper提供了:instruct参数,可以让你指定XML处理指令

8. Action Mailer

现在支持了邮件模板的布局功能,例如layouts/customer_mailer.html.erb使用这样的模板来布局,更多信息请看:What's New in Edge Rails: Mailer Layouts

9. Active Support

9.1. Memoization

Memoization可以让那些只需要初始化一次的方法以声明式的方式来编写,例如过去我们这样写:

def full_name
  @full_name ||= "#{first_name} #{last_name}"
end


现在我们可以这样来声明:
extend ActiveSupport::Memoizable

def full_name
  "#{first_name} #{last_name}"
end
memoize :full_name


这样的声明式方法还有:unmemoize, unmemoize_all, 和memoize_all。更多信息请看:
What's New in Edge Rails: Easy Memoization
Memo-what? A Guide to Memoization


9.2. each_with_object


each_with_object 实际上是inject方法的一个替代,例如:
%w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase } #=> {'foo' => 'FOO', 'bar' => 'BAR'}


9.3. 前缀代理(Delegates With Prefixes)

通过方法的前缀来指明使用关联类的方法,例如:
class Vendor << ActiveRecord::Base
  has_one :account
  delegate :email, :password, :to => :account, :prefix => true
end


这样就可以直接写vendor.account_email和vendor.account_password了。也可以自定义前缀:
class Vendor << ActiveRecord::Base
  has_one :account
  delegate :email, :password, :to => :account, :prefix => :owner
end

那么你可以用vendor.owner_email和vendor.owner_password这样的方法调用。


后面还有一些非常细小的功能更新,不再一一点评了。
23
0
评论 共 6 条 请登录后发表评论
6 楼 dd_ror 2008-10-28 20:30
看视频可以去rubycnrails.cn
虽然都是简单的
5 楼 yangzhihuan 2008-10-27 10:09
3、更加优秀的HTTP集成功能: 唾手可得的ETag功能
5.4.2. 查找不符合条件的记录(find_by_<attributes>!)

这两个我喜欢.
4 楼 inosin 2008-10-27 09:54
正式版啥时候发布?
3 楼 sina2009 2008-10-26 14:52
非常好,

可惜railsenvy的视频与ruby on rails 2.2 what's new都收费了

看来经济不景气对开源确实有影响

2 楼 blackanger 2008-10-26 01:57
blackanger 写道

太棒了!each_with_object 这个方法,是对所有的对象都支持了 ?inject只支持Hash和Array类型。 还没来得及安装rc1版测试。

有点兴奋过度,问了个蠢问题 。。。
1 楼 blackanger 2008-10-26 01:55
太棒了!
each_with_object 这个方法,是对所有的对象都支持了 ?inject只支持Hash和Array类型。 还没来得及安装rc1版测试。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Ruby on Rails 2.2 发行笔记

    Ruby on Rails 2.2 发行笔记 1. Infrastructure Rails 2.2 is a significant release for the infrastructure that keeps Rails humming along and connected to the rest of the world. 1.1. ...

  • Status Ruby on Rails in China - Presentation Transcript

    Slide 1: 铁道中文应用开发现状综述 2008年8月 制作发布:铁道播客 BD7LX 深圳 http://rorcast.blogger2blogger.com/ 铁道中文应用开发现状综述 2006年8月 An Interim Report of Ruby on Rails Applications and ...

  • 在Ubuntu/Debian上面安装Ruby on Rails的生产环境服务器

    本文将告诉你如何在Ubuntu/Debian上安装Ruby on Rails的生产环境服务器,以及如何在它上面部署Rails程序。 首先,我们准备安装的东西有: Ruby 1.8.5 Ruby on Rails 1.2.3 Subversion 1.4 Mysql 5.x Server ...

  • 在Ubuntu 15.04中安装Ruby on Rails

    本篇我们会学习如何用rbenv在Ubuntu 15.04中安装Ruby on Rails。我们选择Ubuntu作为操作系统是因为Ubuntu是Linux发行版中自带很多包和完整文档的操作系统,因此我认为这是正确的选择。如果你还没有安装最新的Ubuntu...

  • 部署之在阿里云 ubuntu 主机上安装 Ruby on Rails 环境 (六)

    # 限定最多使用1.5GB内存 maxmemory 1536mb 2.5 安装nodejs 使用ruby on rails都知道要安装这个的啦。编译coffeescript也是靠它。 也就一条命令 sudo apt-get install nodejs 2.6 安装mysql 也就是一条命令,中间...

  • java实现ruby解释器,JRuby Java实现的Ruby解释器

    JRuby 是面向 Ruby、基于 Java 虚拟机(JVM)的一种解释程序,它结合了 Ruby 语言的简易性和功能强大的 JVM 的执行机制,包括与 Java 库全面集成。Rails 彻底加快及简化了 Web 应用的开发,不过它让人觉得不够成熟,...

  • 中国高温合金市场规模预测与发展态势研究报告2022版

    2.1.4 固定资产投资 2.1.5 转型升级态势 2.2 政策环境 2.2.1 中国制造2025 2.2.2 新材料发展指南 2.2.3 航空航天商业化 2.2.4 高温合金相关政策 2.2.5 “两机专项”相关政策 2.3 社会环境 2.3.1 科技创新...

  • 中国新能源汽车行业运作模式与供需形势分析报告2022版

    2.1 新能源汽车行业企业投资环境(PEST)分析 2.1.1 政治(Political)环境 2.1.2 经济(Economic)环境 2.1.3 社会(Social)环境 2.1.4 技术(Technological)环境 2.2 新能源汽车行业企业投资SWOT分析 ...

  • 中国快递行业运营状况与竞争趋势展望报告2022版

    2.2 经济环境(Economic) 2.2.1 国际宏观经济 2.2.2 国内宏观经济 2.2.3 对外经济分析 2.2.4 居民收入水平 2.2.5 居民消费现状 2.3 社会环境(Social) 2.3.1 零售市场规模 2.3.2 人口发展规模 2.3.3 ...

  • 中国高等职业教育产业专项规划与投资状况分析报告2022版

    2.1.2 职业教育市场规模 2.1.3 就业压力逐步加大 2.1.4 职教市场需求旺盛 2.1.5 职业教育发展问题 2.1.6 职业教育集团化发展 2.2 中国在线职业教育发展分析 2.2.1 市场基本分类 2.2.2 行业生态结构 2.2.3 ...

  • 全球及中国发电设备行业十四五专项规划与发展态势分析报告2022版

    2.1.3 发电设备行业经济运行状况 2.1.4 发电设备行业转型升级发展 2.1.5 发电设备制造基地绿色发展 2.1.6 发电设备状态检修实施模式 2.2 2019-2021年我国发电设备行业总析 2.2.1 2021年中国发电设备行业回顾 ...

  • 中国芯片设计行业发展机遇与投资潜力分析报告2022版

    图表96 芯片设计行业上市公司名单(前20家) 图表97 2016-2021年芯片设计行业上市公司资产规模及结构 图表98 芯片设计行业上市公司上市板分布情况 图表99 芯片设计行业上市公司地域分布情况 图表100 2016-2021...

  • 全球及中国人造板行业需求潜力与发展规模分析报告2022版

    2.1 经济环境 2.1.1 宏观经济概况 2.1.2 对外经济分析 2.1.3 工业经济运行 2.1.4 宏观经济展望 2.2 政策环境 2.2.1 林业行业相关标准 2.2.2 人造板现行标准汇总 2.2.3 人造板行业标准修订 2.2.4 人造板...

  • 中国新能源汽车产业销售模式与十四五竞争格局展望报告2022版

    2.1 宏观经济背景 2.1.1 全球宏观经济表现 2.1.2 中国宏观经济概况 2.1.3 中国居民消费水平 2.1.4 中国消费市场特征 2.2 生态环境背景 2.2.1 全球能源消费情况 2.2.2 新能源汽车排放量 2.2.3 中国汽车尾气...

  • 全球及中国农业机械行业发展方向与十四五投资机遇调研报告2022版

    2.1.5 全球农机装备发展趋势 2.2 美国农业机械 2.2.1 美国农业机械行业现状 2.2.2 美国农业机械市场情况 2.2.3 美国农机流通模式及渠道 2.2.4 美国研发棉花采摘机器人 2.2.5 美国农业机械的技术开发进展 2.3...

  • 全球及中国竹业发展态势与投资潜力研究报告2022版

    第十五章 2018-2021年竹产业重点企业发展分析 15.1 竹藤制品行业上市公司运行状况分析 15.1.1 竹藤制品行业上市公司规模 15.1.2 竹藤制品行业上市公司分布 15.2 福建龙泰竹家居股份有限公司 15.2.1 企业发展...

  • 中国航空物流行业运行现状与总体布局规划报告2022版

    2.1.5 运输安全状况 2.2 2019-2021年全球航空物流行业综述 2.2.1 航空物流价值链 2.2.2 航空物流数字化发展 2.2.3 2021年市场发展现状 2.2.4 2020年市场运行现状 2.2.5 2021年市场运行状况 2.2.6 航空运输业...

  • 中国煤化工行业十四五战略目标与发展建议分析报告2022版

    2.2 中国煤化工产业基本情况 2.2.1 行业扶持政策 2.2.2 行业发展历程 2.2.3 产业链条发展 2.2.4 行业发展重点 2.3 2019-2021年中国煤化工产业运行分析 2.3.1 行业产能情况 2.3.2 细分领域发展 2.3.3 企业...

  • 中国新能源汽车行业十四五展望规划与投资决策建议报告2022版

    2.1 宏观经济环境 2.1.1 全球宏观经济形势 2.1.2 中国宏观经济概况 2.1.3 中国居民收支水平 2.1.4 中国消费市场特征 2.1.5 中国宏观经济展望 2.2 汽车产业运行 2.2.1 汽车行业经营分析 2.2.2 汽车产销量...

  • AVR单片机项目-ADC键盘(源码+仿真+效果图).zip

    使用adc功能来判断不同电压,那必定是通过电压的不同来区分的,这就需要按键与电阻进行组合,我设计打算使用正比关系的按键阻值,这样会比较好在程序判断,最后就如仿真图那样设计,按键按下让某部分电路短路,剩下的电路得到不同的电压值,而不同按键按下,对应的电阻值是10k的倍数,很好区分。而基地的电阻设为10k,按键靠近gnd的电压值最小,远离则慢慢增大,可大概计算出来的,分压的电压为5v。按键不按时为0v,有按键按的电压范围为2.5v~0.238v。然后用以前编写好的数码管驱动拿过来用,也就是用动态扫描的方式进行显示的。然后编写adc代码,根据atmega16的数据手册就可以慢慢写出来了,即配置好ADMUX、ADCSRA寄存器,使用单次触发的方式,写好对应的函数,在初始化之后,使用定时器1中断进行adc的读取和数码管的刷新显示。而adc对应按键的判断也使用了for循环对1024分成1~21份,对其附近符合的值即可判断为按键i-1,可直接显示出来,而误差值可以多次测量后进行调整。 使用adc功能来判断不同电压,那必定是通过电压的不同来区分的,这就需要按键与电阻进行组合,我设计打算使用正比关系的按

Global site tag (gtag.js) - Google Analytics