- 浏览: 110899 次
- 性别:
- 来自: 北京
最新评论
-
adidaskebi123:
不错,最近小弟正在接触部署方面的东西
capistrano 部署rails -
kfw5313:
呵呵 路过 我孔繁伟
e-texteditor 与cygwin 开发rails -
lgn21st:
这个用的是Prototype,有时切图时CPU占用率较高,比较 ...
ramgick 剪切用户头像 -
chinapkw:
难道我的权限还不够,不能上传附件,晕掉。。
你在网上找一下C ...
ramgick 剪切用户头像 -
qianjigui:
加问一句,那个view需要些什么代码?谢谢!
ramgick 剪切用户头像
rails 2.0 终于发布了。呵
装上试一下新功能。gem install rails 可是有错误。
ERROR: While executing gem ... (Zlib::BufError)
buffer error
错误在于,gem 的版本。呵
我装的是ruby 1.8.6 gem 0.9.2
更新一下gem update --system
更新到gem 0.9.5
再安装rails 2.0 问题解决 转一篇2.0新特性文章
David Heinemeier Hansson(DHH)在Ruby on Rails的官方blog上宣布,经历了将近一年的开发之后,Ruby on Rails 2.0目前已经正式发布.
2.0版本的Rails具备众多新的特性,并且在代码上做出了大量的修补和完善.就新版的发布,David这样写道:
Rails 2.0是Rails框架发展历史上的一个里程碑.我投入在Rails框架开发方面的工作已经有四年半的时间,并且Rails目前的开发参与者也越来越多. 对这几年我们所做出的努力和坚持的信念,我感到非常的满意.并且我们坚持一贯的理念,同时不断推动Rails的发展.
发布说明中,描述最新特性的列表有很多内容.令Rails开发者最为关注的改进包括有:
Action Pack: Resources
在Controller之中充斥着大量action方法的情况已经不存在了,我们对RESTful方式的实现进行了大量的改进和提高.首先,我们不再使用分号来分隔自定义方法,而是采用斜线,例如原先是/people/1;edit的URL,现在改成了 /people/1/edit.另外我们还对URL路由资源添加了命名空间的支持,因此像后台管理的接口可以非常简单的定义如下:
map.namespace(:admin) do |admin| admin.resources :products, :collection => { :inventory => :get }, :member => { :duplicate => :post }, :has_many => [ :tags, :images, :variants ]end
这种方式可以使开发者按照inventory_admin_products_url和 admin_product_tags_url的方式来定义命名路由.为了方便记录所有路由规则,我们添加了一个叫做“rake routes”的rake任务,可以帮助开发者列举出routes.rb定义的所有命名路由规则.
此外我们还引入了一个新的约定,即所有基于资源的controller的默认形式都是复数形式.这样即便单个资源在不同路由规则中被多次引用,仍然可以指向同一个controller来处理,例如:
# /avatars/45 => AvatarsController#show map.resources :avatars # /people/5/avatar => AvatarsController#show map.resources :people, :has_one => :avatar
Action Pack: Multiview
Action Pack中与资源映射一起增强功能的还有MultiView.我们已经有了respond_to方法,但我们可以更进一步,把MultiView控制延伸到模板里面去.我们可以根据模板文件的后缀格式来决定使用什么render呈现机制.因此,show.rhtml可以写成show.rhtml.erb,这就表明是show这个action的一个默认rhtml模板,和之前在Action里面使用respond_to声明的format.html是一个意思.此外还可以使用诸如show.csv.erb的形式,表明显示为csv格式的数据,并且使用默认的ERB去render呈现.
所以,新的模板格式是: action.format.renderer.下面有几个例子:
show.erb: 对于所有格式,都使用默认的erb显示show模板
index.atom.builder: 用Builder库来呈现XML文件,之前被称作rxml,输出的文件类型为RSS的AOTM类型
edit.iphone.haml: 使用自定义的HAML模板引擎机制(默认情况下并没有包含)来render输出模板内容到iPhone手机之上
说到iPhone手机,我们可以自定义一个专用类型来实现内部路由.当你需要类似iPhone这样的特殊HTML接口的时候,我们所要这样去实现.
Action Pack: Record identification
为了驱使开发者使用基于资源的映射,我们对资源映射的controller和view的URL处理进行了大量的简化.我们添加了大量命名约定,可以直接把model对象转化为资源映射的路由,例如:
# person is a Person object, which by convention will # be mapped to person_url for lookup redirect_to(person) link_to(person.name, person) form_for(person)
Action Pack: 贴近HTTP方式
正如开发者期望的那样,Rails 2.0的Action Pack更加贴近HTTP并且充分利用了HTTP协议,例如资源、多种视图,以及其他更多的内容.我们添加了一个模块来处理HTTP的基本验证,可以使得授权的API轻松跨越SSL协议,而且非常简单易用.下面是一个例子(更多的例子请参考ActionController:: HttpAuthentication):
class PostsController < ApplicationController USER_NAME, PASSWORD = "dhh", "secret" before_filter :authenticate, :except => [ :index ] def index render :text => "Everyone can see me!" end def edit render :text => "I'm only accessible if you know the password" end private def authenticate authenticate_or_request_with_http_basic do |user_name, password| user_name == USER_NAME && password == PASSWORD end end end
此外,我们在把JavaScript和CSS文件组织到一个逻辑单元之上这个方面做了很多工作,不需要让浏览器发起多次HTTP请求,分别获取每个JavaScript和CSS文件,以便减少HTTP请求次数.使用javascript_include_tag(:all, :cache => true) 这个helper在production模式下把public/javascripts/目录中所有js文件打包到单个 public/javascripts/all.js文件里面,但在开发环境下,仍然保持每个文件独立的修改,这样便可以反复迭代而不必清理缓存.
我们还添加了一些选项让,仅用几行代码就能够让浏览器去访问多台服务器上面的资源.如果你添加如下设置:ActionController:: Base.asset_host = “assets%d.example.com”,那么Rails框架就会自动的把静态资源的请求分发到多台物理服务器上面去,例如分发到 assets1.example.com到 assets4.example.com等等之上.这样浏览器可以同时向多台服务器获取资源,增加你的应用的访问速度.
Action Pack: 安全性
能够快捷的创建出安全应用总是一件令人愉快的事情,而Rails2.0提供了大量先进功能来实现这一目标.重要的是,Rails现在提供了一种内建的机制来处理CRSF攻击.我们在所有的HTML表单和AJAX请求中包含了一个特殊的token,当请求来自于其他应用的时候,就可以及时检测到.所有这些安全选项,在新创建的Rails 2.0项目当中默认就是开启的状态,对于升级到Rails 2.0的应用,要打开这一个选项也很容易,可以使用ActionController::Base.protect_from_forgery来开启选项(详细的说明请参照:ActionController::RequestForgeryProtection).
对于允许用户在应用当中提交嵌入HTML代码的情况,防止XSS攻击也变得更加简单了.之前的TextHelper#sanitize方法从过滤黑名单(很难保证安全性)转变成了验证白名单.如果你已经使用了sanitize方法,就可以自动获得更好的保护.当然你也可以自行调整sanitize 方法默认允许的HTML tag,请看TextHelper#sanitize获取详情.
最后,我们还添加了对于HTTP单一cookies的支持,这一特性并不是所有的浏览器都支持,但是对于对此提供支持的浏览器就可以派上用场了.
Action Pack: 异常处理
大多数常见的异常都可以统一处理,而不是每个需要单独的处理.通常情况下,开发者只需要覆盖rescue_action_in_public方法,来进行统一的异常处理.但是也有可能需要使用自己的case语句来处理特定场合的异常.因此我们现在提供了一个类级别的宏叫做rescue_from,你可以使用这个宏来声明针对某个特定的Action来捕获异常,例如:
class PostsController < ApplicationController rescue_from User::NotAuthorized, :with => :deny_access protected def deny_access ... end end
Action Pack: 用Cookie存储sessions
Rails 2.0默认的Session存储机制目前是基于Cookie实现的.这意味着Session可以不必存储在服务器的文件系统或者数据库系统里面,而是以 hash的格式每次作为cookie发送到客户端浏览器来保持.这样做不仅仅会比传统的服务器端保存Session的方式要快一些,而且完全不需要维护.你不需要在服务器上面运行cron job任务来清理session文件,也不必担心因为你忘记清理session文件导致服务器tmp/session路径下面因为塞满了50万的 session文件,而使得服务器垮掉.
Action Pack: 新的request profiler
在实际的应用当中找出性能瓶颈是一个艰难的工作,但在有了我们新的request profiler之后,工作会变得简单很多.request profiler可以跟踪一个完整的执行脚本,报告查找执行的结果,你可以像这样来使用它:
$ cat login_session.rb get_with_redirect '/' say "GET / => #{path}" post_with_redirect '/sessions', :username => 'john', :password => 'doe' say "POST /sessions => #{path}" $ ./script/performance/request -n 10 login_session.rb
这样你就可以得到一份非常详尽的HTML和文本格式的运行报告,包含每个步骤执行多少时间,有了这样的报告,就可以很清楚的知道如何优化你的应用程序.
Action Pack: 特色功能
同样值得一提的是AtomFeedHelper.它可以让你更容易的使用增强的Builder格式来创建RSS Feed输出.
Active Record: 性能
Active Record方面进行了众多的bug修复和部分调整,但是仍然有些值得一提的特性.我们添加了一个非常简单的查询缓存,它能够在同一个请求的过程当中记录相似的SQL调用,并且返回缓存的查询结果.查询缓存对于那些很难使用:include来解决的N+1次查询问题会非常有帮助.另外我们也彻底提高了 fixtures的性能,对于大多数常规的测试工具包,性能提高了50-100%.
Active Record: 改进的数据迁移脚本
现在我们有一种新的migration文件声明,来替换原有的格式.以前我们是这样来写的:
create_table :people do |t| t.column, "account_id", :integer t.column, "first_name", :string, :null => false t.column, "last_name", :string, :null => false t.column, "description", :text t.column, "created_at", :datetime t.column, "updated_at", :datetimeend
而现在我们可以这样写:
create_table :people do |t| t.integer :account_id t.string :first_name, :last_name, :null => false t.text :description t.timestampsend
Active Record: Foxy fixtures
在fixtures里面通过声明id属性作为主键,来构造fixtures之间的关联关系是枯燥的工作.现在你可以通过下面的方式声明和编写fixtures:
# sellers.yml shopify: name: Shopify # products.yml pimp_cup: seller: shopify name: Pimp cup
如上所示,不再需要定义id属性,而是通过seller_id来关联fixtures,你现在可以直接使用fixtures的名字seller来建立关联关系.
Active Record: 加入XML,移出JSON
ActiveRecord支持XML的序列化已有一段时间了.在Rails2.0当中,我们还添加了XML的反序列化功能,所以你现在可以这样用 Person.new.from_xml(“David“) 来获取person对象.当然我们也添加了序列化到JSON格式的功能,它和XML序列化的支持是一样的(包含嵌套的关联).只需要写 person.to_json就可以实现这样的功能了.
Active Record: 更加轻量级
为了让Active Record更加简洁和通用,我们把acts_as_xxx等功能移出了Rails,放在了Rails官方的SVN插件里面.如果你需要用到诸如 acts_as_list的话,那么你需要安装这个插件,你可以使用./script/plugin install acts_as_list来安装,安装好以后,acts_as_list功能又回来了,就像一切没有发生一样.
更进一步的改动是我们把所有的商业数据库驱动全部挪到了外部的gem包里面.因此Rails 2.0仅仅自带MySQL、SQLite和PostgreSQL数据库驱动.这三个数据库是我们乐于积极测试和支持的数据库.当然,这并非意味着我们排斥商业数据库,我们只是希望它们能够在 Rails发行版本之外保持自己独立的开发和发布计划.对于商业数据库来说,这其实是一件好事情,让厂商可以在基础版本上面添加更多的异常和处理机制,使其工作的更好.
所有的商业数据库驱动现在都存放在gems包里面,符合如下的命名规则:activerecord-XYZ-adapter.所以如果你安装了 activerecord-oracle-adapter包,那么这台机器上面所有的各种版本的Rails应用程序都可以访问Oracle数据库,你却无需在应用中修改任何一行代码.
对于新的数据库驱动来说,这种方式在Rails社区中也可以更加方便的方式获得支持.只要你把数据库驱动安装命名规范打包成为gem,用户就可以安装这个gem并立刻在Rails程序当中使用其功能.
Active Record: with_scope方法的使用
ActiveRecord::Base.with_scope不被鼓励使用,以避免用户在controoler,特别是filter里面对其误用.现在我们鼓励用户仅仅在model里面使用这种格式,这也是当初我们设计这项功能的初衷和保持良好实践的需要.当然,这仅仅是鼓励和劝阻,如果你在衡量得失之后,非要坚持在model之外使用with_scope的话,你尽管可以使用.send(:with_scope)的方式来进行调用.
移出ActionWebService,加入ActiveResource
在SOAP和REST的争论当中,Rails选择坚定的站在REST一方,这并不出人意料.如果你并没有集成异构系统的需求的话,那么我们强烈不建议你使用SOAP.这是很自然的选择,我们已经将ActionWebService摘出Rails框架的默认依赖当中.只有gem包仍然保留,这是一个重要的信息,我们建议你尽量不用它.
与此同时,我们把新的ActiveResource包从beta版本升级挪入Rails框架之内.ActiveResource很像 ActiveRecord,只不过面向的不是model而是资源.它有和ActiveRecord非常相似的API,并且可以和基于资源的Rails应用良好的整合.例如,ActiveResource提供了一个vanilla scaffold,你可以很容易的理解.
Rails: 调试器回来了
为了更好的将调试器与Rails整合在一起,我们对Rails框架整体进行了一系列改进.我最满意之处是在调试器之上新增断点功能.这不仅仅只是一个类似IRB dump那样的断点数据检测方式,而是一个真正的调试器.你可以拥有单步前进、单步后退、列举当前位置等功能.这完全得益于ruby-debug这个 gem包,所以我们推荐你安装这个gem包,之后Rails新的调试器就可以工作了.
如果想使用调试器,那么首先安装ruby-debug这个gem包,然后把“debugger”命令写在应用程序当中,接着用- debugger或者-u参数启动服务器,当代码执行到debugger命令的地方,你就可以在运行服务器的终端上面直接操纵应用了,完全不需要使用 script/breakpointer或者其他的什么东西.当然你也可以在单元测试当中使用调试器.
Rails: 更清洁的环境配置
在Rails 2.0之前的版本,config/environment.rb文件当中塞满了各种各样的启动配置信息和代码.现在你可以把这些东西分门别类的放在独立的文件当中,然后把文件放在config/initializers目录下面,当Rails应用启动的时候它们就会被自动加载.新的 Rails 2.0应用自带了两个这样的例子,分别是inflections.rb(定义你自己的单复数规则)和mime_types.rb(定义你自己的扩展类型).我们建议开发者把启动配置信息放在其他文件里,而不去改动environment.rb文件.
Rails: 易于管理的插件顺序
现在我们开始把很多功能从Rails中分离出来,放到插件里面,你也许可能安装有一些其他依赖这些功能的插件.例如在你自己的 acts_as_extra_cool_list插件被加载之前,需要首先加载acts_as_list插件,因为 acts_as_extra_cool_list扩展了acts_as_list.
在Rails2.0之前,需要在config.plugins里面列举所有的插件来设定插件加载次序.这种做法主要的问题是当你仅仅需要 acts_as_list插件加载次序在前,而不关心其他插件加载次序的时候需要做太多工作.而现在你仅需要这样写就可以:config.plugins = [ :acts_as_list, :all ].
David同时说明另外还有数百处的其他修正,在此不展开一一列举.
升级
如果你希望将原有应用升级到Rails2.0,那么推荐你应该首先升级到Rails 1.2.6版本.这是由于Rails 1.2.6中包含对Rails 2.0更新功能的警告信息.如果应用程序在Rails 1.2.6上面良好运行,并且没有警告信息,那么你就可以升级到Rails 2.0了.
获取Ruby on Rails更多的信息,请访问Ruby on Rails官方站点.
译注:本文翻译时,参考了robbin先生的Ruby on Rails 2.0的新特性介绍一文,在此表示谢意.
作者 Robert Bazinet译者 高昂
装上试一下新功能。gem install rails 可是有错误。
ERROR: While executing gem ... (Zlib::BufError)
buffer error
错误在于,gem 的版本。呵
我装的是ruby 1.8.6 gem 0.9.2
更新一下gem update --system
更新到gem 0.9.5
再安装rails 2.0 问题解决 转一篇2.0新特性文章
David Heinemeier Hansson(DHH)在Ruby on Rails的官方blog上宣布,经历了将近一年的开发之后,Ruby on Rails 2.0目前已经正式发布.
2.0版本的Rails具备众多新的特性,并且在代码上做出了大量的修补和完善.就新版的发布,David这样写道:
Rails 2.0是Rails框架发展历史上的一个里程碑.我投入在Rails框架开发方面的工作已经有四年半的时间,并且Rails目前的开发参与者也越来越多. 对这几年我们所做出的努力和坚持的信念,我感到非常的满意.并且我们坚持一贯的理念,同时不断推动Rails的发展.
发布说明中,描述最新特性的列表有很多内容.令Rails开发者最为关注的改进包括有:
Action Pack: Resources
在Controller之中充斥着大量action方法的情况已经不存在了,我们对RESTful方式的实现进行了大量的改进和提高.首先,我们不再使用分号来分隔自定义方法,而是采用斜线,例如原先是/people/1;edit的URL,现在改成了 /people/1/edit.另外我们还对URL路由资源添加了命名空间的支持,因此像后台管理的接口可以非常简单的定义如下:
map.namespace(:admin) do |admin| admin.resources :products, :collection => { :inventory => :get }, :member => { :duplicate => :post }, :has_many => [ :tags, :images, :variants ]end
这种方式可以使开发者按照inventory_admin_products_url和 admin_product_tags_url的方式来定义命名路由.为了方便记录所有路由规则,我们添加了一个叫做“rake routes”的rake任务,可以帮助开发者列举出routes.rb定义的所有命名路由规则.
此外我们还引入了一个新的约定,即所有基于资源的controller的默认形式都是复数形式.这样即便单个资源在不同路由规则中被多次引用,仍然可以指向同一个controller来处理,例如:
# /avatars/45 => AvatarsController#show map.resources :avatars # /people/5/avatar => AvatarsController#show map.resources :people, :has_one => :avatar
Action Pack: Multiview
Action Pack中与资源映射一起增强功能的还有MultiView.我们已经有了respond_to方法,但我们可以更进一步,把MultiView控制延伸到模板里面去.我们可以根据模板文件的后缀格式来决定使用什么render呈现机制.因此,show.rhtml可以写成show.rhtml.erb,这就表明是show这个action的一个默认rhtml模板,和之前在Action里面使用respond_to声明的format.html是一个意思.此外还可以使用诸如show.csv.erb的形式,表明显示为csv格式的数据,并且使用默认的ERB去render呈现.
所以,新的模板格式是: action.format.renderer.下面有几个例子:
show.erb: 对于所有格式,都使用默认的erb显示show模板
index.atom.builder: 用Builder库来呈现XML文件,之前被称作rxml,输出的文件类型为RSS的AOTM类型
edit.iphone.haml: 使用自定义的HAML模板引擎机制(默认情况下并没有包含)来render输出模板内容到iPhone手机之上
说到iPhone手机,我们可以自定义一个专用类型来实现内部路由.当你需要类似iPhone这样的特殊HTML接口的时候,我们所要这样去实现.
Action Pack: Record identification
为了驱使开发者使用基于资源的映射,我们对资源映射的controller和view的URL处理进行了大量的简化.我们添加了大量命名约定,可以直接把model对象转化为资源映射的路由,例如:
# person is a Person object, which by convention will # be mapped to person_url for lookup redirect_to(person) link_to(person.name, person) form_for(person)
Action Pack: 贴近HTTP方式
正如开发者期望的那样,Rails 2.0的Action Pack更加贴近HTTP并且充分利用了HTTP协议,例如资源、多种视图,以及其他更多的内容.我们添加了一个模块来处理HTTP的基本验证,可以使得授权的API轻松跨越SSL协议,而且非常简单易用.下面是一个例子(更多的例子请参考ActionController:: HttpAuthentication):
class PostsController < ApplicationController USER_NAME, PASSWORD = "dhh", "secret" before_filter :authenticate, :except => [ :index ] def index render :text => "Everyone can see me!" end def edit render :text => "I'm only accessible if you know the password" end private def authenticate authenticate_or_request_with_http_basic do |user_name, password| user_name == USER_NAME && password == PASSWORD end end end
此外,我们在把JavaScript和CSS文件组织到一个逻辑单元之上这个方面做了很多工作,不需要让浏览器发起多次HTTP请求,分别获取每个JavaScript和CSS文件,以便减少HTTP请求次数.使用javascript_include_tag(:all, :cache => true) 这个helper在production模式下把public/javascripts/目录中所有js文件打包到单个 public/javascripts/all.js文件里面,但在开发环境下,仍然保持每个文件独立的修改,这样便可以反复迭代而不必清理缓存.
我们还添加了一些选项让,仅用几行代码就能够让浏览器去访问多台服务器上面的资源.如果你添加如下设置:ActionController:: Base.asset_host = “assets%d.example.com”,那么Rails框架就会自动的把静态资源的请求分发到多台物理服务器上面去,例如分发到 assets1.example.com到 assets4.example.com等等之上.这样浏览器可以同时向多台服务器获取资源,增加你的应用的访问速度.
Action Pack: 安全性
能够快捷的创建出安全应用总是一件令人愉快的事情,而Rails2.0提供了大量先进功能来实现这一目标.重要的是,Rails现在提供了一种内建的机制来处理CRSF攻击.我们在所有的HTML表单和AJAX请求中包含了一个特殊的token,当请求来自于其他应用的时候,就可以及时检测到.所有这些安全选项,在新创建的Rails 2.0项目当中默认就是开启的状态,对于升级到Rails 2.0的应用,要打开这一个选项也很容易,可以使用ActionController::Base.protect_from_forgery来开启选项(详细的说明请参照:ActionController::RequestForgeryProtection).
对于允许用户在应用当中提交嵌入HTML代码的情况,防止XSS攻击也变得更加简单了.之前的TextHelper#sanitize方法从过滤黑名单(很难保证安全性)转变成了验证白名单.如果你已经使用了sanitize方法,就可以自动获得更好的保护.当然你也可以自行调整sanitize 方法默认允许的HTML tag,请看TextHelper#sanitize获取详情.
最后,我们还添加了对于HTTP单一cookies的支持,这一特性并不是所有的浏览器都支持,但是对于对此提供支持的浏览器就可以派上用场了.
Action Pack: 异常处理
大多数常见的异常都可以统一处理,而不是每个需要单独的处理.通常情况下,开发者只需要覆盖rescue_action_in_public方法,来进行统一的异常处理.但是也有可能需要使用自己的case语句来处理特定场合的异常.因此我们现在提供了一个类级别的宏叫做rescue_from,你可以使用这个宏来声明针对某个特定的Action来捕获异常,例如:
class PostsController < ApplicationController rescue_from User::NotAuthorized, :with => :deny_access protected def deny_access ... end end
Action Pack: 用Cookie存储sessions
Rails 2.0默认的Session存储机制目前是基于Cookie实现的.这意味着Session可以不必存储在服务器的文件系统或者数据库系统里面,而是以 hash的格式每次作为cookie发送到客户端浏览器来保持.这样做不仅仅会比传统的服务器端保存Session的方式要快一些,而且完全不需要维护.你不需要在服务器上面运行cron job任务来清理session文件,也不必担心因为你忘记清理session文件导致服务器tmp/session路径下面因为塞满了50万的 session文件,而使得服务器垮掉.
Action Pack: 新的request profiler
在实际的应用当中找出性能瓶颈是一个艰难的工作,但在有了我们新的request profiler之后,工作会变得简单很多.request profiler可以跟踪一个完整的执行脚本,报告查找执行的结果,你可以像这样来使用它:
$ cat login_session.rb get_with_redirect '/' say "GET / => #{path}" post_with_redirect '/sessions', :username => 'john', :password => 'doe' say "POST /sessions => #{path}" $ ./script/performance/request -n 10 login_session.rb
这样你就可以得到一份非常详尽的HTML和文本格式的运行报告,包含每个步骤执行多少时间,有了这样的报告,就可以很清楚的知道如何优化你的应用程序.
Action Pack: 特色功能
同样值得一提的是AtomFeedHelper.它可以让你更容易的使用增强的Builder格式来创建RSS Feed输出.
Active Record: 性能
Active Record方面进行了众多的bug修复和部分调整,但是仍然有些值得一提的特性.我们添加了一个非常简单的查询缓存,它能够在同一个请求的过程当中记录相似的SQL调用,并且返回缓存的查询结果.查询缓存对于那些很难使用:include来解决的N+1次查询问题会非常有帮助.另外我们也彻底提高了 fixtures的性能,对于大多数常规的测试工具包,性能提高了50-100%.
Active Record: 改进的数据迁移脚本
现在我们有一种新的migration文件声明,来替换原有的格式.以前我们是这样来写的:
create_table :people do |t| t.column, "account_id", :integer t.column, "first_name", :string, :null => false t.column, "last_name", :string, :null => false t.column, "description", :text t.column, "created_at", :datetime t.column, "updated_at", :datetimeend
而现在我们可以这样写:
create_table :people do |t| t.integer :account_id t.string :first_name, :last_name, :null => false t.text :description t.timestampsend
Active Record: Foxy fixtures
在fixtures里面通过声明id属性作为主键,来构造fixtures之间的关联关系是枯燥的工作.现在你可以通过下面的方式声明和编写fixtures:
# sellers.yml shopify: name: Shopify # products.yml pimp_cup: seller: shopify name: Pimp cup
如上所示,不再需要定义id属性,而是通过seller_id来关联fixtures,你现在可以直接使用fixtures的名字seller来建立关联关系.
Active Record: 加入XML,移出JSON
ActiveRecord支持XML的序列化已有一段时间了.在Rails2.0当中,我们还添加了XML的反序列化功能,所以你现在可以这样用 Person.new.from_xml(“David“) 来获取person对象.当然我们也添加了序列化到JSON格式的功能,它和XML序列化的支持是一样的(包含嵌套的关联).只需要写 person.to_json就可以实现这样的功能了.
Active Record: 更加轻量级
为了让Active Record更加简洁和通用,我们把acts_as_xxx等功能移出了Rails,放在了Rails官方的SVN插件里面.如果你需要用到诸如 acts_as_list的话,那么你需要安装这个插件,你可以使用./script/plugin install acts_as_list来安装,安装好以后,acts_as_list功能又回来了,就像一切没有发生一样.
更进一步的改动是我们把所有的商业数据库驱动全部挪到了外部的gem包里面.因此Rails 2.0仅仅自带MySQL、SQLite和PostgreSQL数据库驱动.这三个数据库是我们乐于积极测试和支持的数据库.当然,这并非意味着我们排斥商业数据库,我们只是希望它们能够在 Rails发行版本之外保持自己独立的开发和发布计划.对于商业数据库来说,这其实是一件好事情,让厂商可以在基础版本上面添加更多的异常和处理机制,使其工作的更好.
所有的商业数据库驱动现在都存放在gems包里面,符合如下的命名规则:activerecord-XYZ-adapter.所以如果你安装了 activerecord-oracle-adapter包,那么这台机器上面所有的各种版本的Rails应用程序都可以访问Oracle数据库,你却无需在应用中修改任何一行代码.
对于新的数据库驱动来说,这种方式在Rails社区中也可以更加方便的方式获得支持.只要你把数据库驱动安装命名规范打包成为gem,用户就可以安装这个gem并立刻在Rails程序当中使用其功能.
Active Record: with_scope方法的使用
ActiveRecord::Base.with_scope不被鼓励使用,以避免用户在controoler,特别是filter里面对其误用.现在我们鼓励用户仅仅在model里面使用这种格式,这也是当初我们设计这项功能的初衷和保持良好实践的需要.当然,这仅仅是鼓励和劝阻,如果你在衡量得失之后,非要坚持在model之外使用with_scope的话,你尽管可以使用.send(:with_scope)的方式来进行调用.
移出ActionWebService,加入ActiveResource
在SOAP和REST的争论当中,Rails选择坚定的站在REST一方,这并不出人意料.如果你并没有集成异构系统的需求的话,那么我们强烈不建议你使用SOAP.这是很自然的选择,我们已经将ActionWebService摘出Rails框架的默认依赖当中.只有gem包仍然保留,这是一个重要的信息,我们建议你尽量不用它.
与此同时,我们把新的ActiveResource包从beta版本升级挪入Rails框架之内.ActiveResource很像 ActiveRecord,只不过面向的不是model而是资源.它有和ActiveRecord非常相似的API,并且可以和基于资源的Rails应用良好的整合.例如,ActiveResource提供了一个vanilla scaffold,你可以很容易的理解.
Rails: 调试器回来了
为了更好的将调试器与Rails整合在一起,我们对Rails框架整体进行了一系列改进.我最满意之处是在调试器之上新增断点功能.这不仅仅只是一个类似IRB dump那样的断点数据检测方式,而是一个真正的调试器.你可以拥有单步前进、单步后退、列举当前位置等功能.这完全得益于ruby-debug这个 gem包,所以我们推荐你安装这个gem包,之后Rails新的调试器就可以工作了.
如果想使用调试器,那么首先安装ruby-debug这个gem包,然后把“debugger”命令写在应用程序当中,接着用- debugger或者-u参数启动服务器,当代码执行到debugger命令的地方,你就可以在运行服务器的终端上面直接操纵应用了,完全不需要使用 script/breakpointer或者其他的什么东西.当然你也可以在单元测试当中使用调试器.
Rails: 更清洁的环境配置
在Rails 2.0之前的版本,config/environment.rb文件当中塞满了各种各样的启动配置信息和代码.现在你可以把这些东西分门别类的放在独立的文件当中,然后把文件放在config/initializers目录下面,当Rails应用启动的时候它们就会被自动加载.新的 Rails 2.0应用自带了两个这样的例子,分别是inflections.rb(定义你自己的单复数规则)和mime_types.rb(定义你自己的扩展类型).我们建议开发者把启动配置信息放在其他文件里,而不去改动environment.rb文件.
Rails: 易于管理的插件顺序
现在我们开始把很多功能从Rails中分离出来,放到插件里面,你也许可能安装有一些其他依赖这些功能的插件.例如在你自己的 acts_as_extra_cool_list插件被加载之前,需要首先加载acts_as_list插件,因为 acts_as_extra_cool_list扩展了acts_as_list.
在Rails2.0之前,需要在config.plugins里面列举所有的插件来设定插件加载次序.这种做法主要的问题是当你仅仅需要 acts_as_list插件加载次序在前,而不关心其他插件加载次序的时候需要做太多工作.而现在你仅需要这样写就可以:config.plugins = [ :acts_as_list, :all ].
David同时说明另外还有数百处的其他修正,在此不展开一一列举.
升级
如果你希望将原有应用升级到Rails2.0,那么推荐你应该首先升级到Rails 1.2.6版本.这是由于Rails 1.2.6中包含对Rails 2.0更新功能的警告信息.如果应用程序在Rails 1.2.6上面良好运行,并且没有警告信息,那么你就可以升级到Rails 2.0了.
获取Ruby on Rails更多的信息,请访问Ruby on Rails官方站点.
译注:本文翻译时,参考了robbin先生的Ruby on Rails 2.0的新特性介绍一文,在此表示谢意.
作者 Robert Bazinet译者 高昂
发表评论
-
ramgick 剪切用户头像
2008-06-27 16:27 1699以前在别的论坛,或网站。上传头像时。总是不是很好,有的直接缩略 ... -
railslogVisualizer and Ruby on Windows Mobile 5
2008-06-17 11:16 1122可视化的rails log分析工具,在网上找了一些都是很老的版 ... -
CommunityEngine plugin for ruby
2008-06-13 16:09 1407http://missingmethod.brunoborns ... -
typo rails 的开源 blog
2008-06-12 13:28 2093小巧精致。 https://rubyforge.org ... -
e-texteditor 与cygwin 开发rails
2008-06-03 17:31 3086用netbeans 开发rails 有一年时间了。受禁了折磨。 ... -
rails2.0 安装beast
2008-06-03 00:29 2265今天想安装一下beast看看.毕竟用rails 这么久了. 本 ... -
可拖拽,保存展开收起状态的个人主页
2008-01-12 11:57 2599<li id="my_list_b" ... -
cache_count
2007-11-21 14:31 1289ruby 代码 #thingsuser.rb ... -
rails 常用文件操作
2007-11-20 13:40 47require 'mockfs' ... -
ruby jmaki on netbeans
2007-11-09 12:15 1263jMaki是SUN支持的一个AJAX框架。这个 ... -
freeze gems
2007-11-07 12:02 1134rake rails:freeze:gems表示把当前Gems ... -
Drag and Drop and Sortable Elements
2007-10-30 18:27 1779xml 代码 Drag and Drop an ... -
rss
2007-10-09 10:44 1396通过BAIDU的快照看到这个文章的,原文章地址已经打不开了,只 ... -
rails 生成rss
2007-09-26 17:07 1977原文:http://xerdoc.com/blog ... -
rake
2007-09-21 14:56 1324转自:http://blog.csdn.net/s ... -
db:migrate简明指南
2007-08-06 17:14 3442首先,确保你已经配置好了database.yml,假设我们要创 ... -
write a plugin for rails
2007-08-06 14:14 1540A few days back I posted my ver ... -
swfupload 上传文件,带进度条 ruby on rails 应用
2007-08-03 10:45 4837公司的相册想要做上传文件的方案。本来用file_column ... -
capistrano 部署rails
2007-07-18 18:04 11733转自石锅拌饭,察 ... -
rails实现验证码
2007-07-07 16:09 14381.在windows上安装Rmagic,如果你是通过gem ...
相关推荐
- 安装完毕后,可以尝试安装一些示例项目来进一步熟悉Rails 2.0的特性。比如,可以安装cookbook或typo-2.6.0等项目进行实践操作。 - 这些示例项目能够帮助开发者更快地了解Rails框架的工作原理,并掌握其核心功能...
【Ruby on Rails 2.0的新特性介绍】 Ruby on Rails 2.0 是这个流行的Web开发框架的一个重大更新,发布于2007年底。Rails以其快速的版本迭代和创新的功能而闻名,从1.0到2.0的升级也不例外。这次更新带来了许多新...
这个“ruby on rails2.0本地安装包”适用于Windows和Linux操作系统,特别是针对网络速度较慢的用户设计,方便他们离线安装Rails 2.0.2版本。 在Rails 2.0版本中,有几个关键性的改进和特性: 1. **ActiveRecord**...
Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...
### Rails 2.0 关键知识点详析 #### 一、引言 Rails 2.0作为Ruby on Rails框架的一个重要版本,在其发布时引入了一系列改进与更新,旨在提升开发效率与应用程序性能。该版本虽然没有引入革命性的新特性,但通过对已...
在Ruby on Rails 2.0框架下,我们经常会遇到创建和操作数据库的需求。在这个实例中,我们将探讨如何在Rails应用中使用SQLite数据库,一个轻量级且易于上手的数据库管理系统,尤其适合开发阶段。标题提到的“mybook”...
《jRuby on Rails WEB2.0》:将Ruby on Rails融入Java平台的实践指南 《jRuby on Rails WEB2.0》是一部由Ola Bini撰写的书籍,深入探讨了如何将Ruby on Rails这一敏捷开源框架与Java平台相结合,以构建高效、灵活的...
Rails 2.0对插件系统进行了改进,使其更易于安装和管理。 9. **部署(Deployment)** Rails 2.0文档也会介绍如何将应用部署到服务器,包括配置Capistrano、 Passenger等部署工具。 10. **国际化(I18n)** Rails 2.0...
《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码
在Ruby on Rails框架中,`Rails 2.0.2`是一个较早的版本,而分页功能在那个时期并不像现在的Rails应用那样内置在框架内。为了实现分页,开发者通常需要安装并使用第三方插件,比如"will_paginate"。这个插件允许你在...
### JRuby on Rails Web 2.0 Projects:将Ruby on Rails引入Java平台 #### JRuby简介 JRuby是一种Ruby语言的实现,它运行在Java平台上,利用了Java虚拟机(JVM)的强大功能。JRuby使得开发人员能够在Java环境中使用...
《Advanced Rails Reciples》作为Rails领域的经典续作,由Brad Ediger撰写,并在2008年出版,涵盖了Rails 2.0版本的新特性及高级用法。本书不仅适合已经有一定Rails基础的开发者进阶学习,也适合希望深入了解Rails...
### 关于Rails 2.0 Rails,即Ruby on Rails,是一种使用Ruby语言构建的开源Web应用框架,遵循Model-View-Controller(MVC)架构模式。它由David Heinemeier Hansson设计并开发,首次发布于2005年。Rails 2.0版本在...