踏踏实实干工作,推进开源大发展!

Rails2.0前瞻

上一篇 / 下一篇  2007-12-20 09:54:23 / 个人分类:网络评论

  着Rails2.0 RC1的发布,Rails2.0开始离我们越来越近了。实际上,Rails2.0的基本功能在RC1中已经确定,因此我们也可以尽快地一睹Rails2.0的风采,了解新的特性,为以后的迁移做好准备。

  ActiveResource

  Rails2.0最大的变化莫过于增加了ActiveResource。你可以将 ActiveResource理解为远程的ActiveRecord,也就是说不同于 ActiveRecord 操作存储在本地数据库中的对象,ActiveResource 操作的是存储于远端服务器上的对象。

我们假设Person是一个ActiveResource类:

Person = ActiveResource::Struct.new do |person|

Person.uri = "http://api.example.com/people"

end

Person.find(1).name #=> "Ryan"

  那么上面这句话将向http://api.example.com/people/1发送了一个GET请求,并通过得到的响应构建了一个本地Person对象。

  你可以像操作其它对象一样来操作这个ActiveResource对象,只不过你对这个对象的CRUD操作都被转化为了相应的HTTP请求,交由远端的服务器来处理,并且这一转换是完全完全遵照REST规范的。

  调试

  Rails2.0的另一个重大变化就是Debugger归来,Rails 1.x中的Debugge受到ruby的一个bugfix的影响,已经停摆许久,不过这次借助强大的Rdebug,重新归来的Rails Debugger已经不再仅仅只是一个简单的IRB,而变成了一个真正意义上的功能齐全的调试器,支持单步调试,断点设置等等。

  路由

  新的map.resource去除掉了1.2.x URL中的';'。同时Rails2.0还对资源嵌套做了相应改进,controller名称默认为复数,也就是说对于像map.resources :people, :has_one => :avatar这样的路由,如果不存在AvatarController,那么所有请求都将被路由到AvatarsController,如果你还有另外一条路由map.resources :avatars,那么他们就可以使用同一个controller。

  模板

  Rails2.0中另外一个重大改变就是增加了多渲染引擎支持,在1.x中, .rhtml文件对应HTML请求,由ERB引擎解析,rxml对应XML请求。而Rails2.0将模板的命名分成了3个部分: action.format.renderer,在action确定后,它首先根据HTTP请求的content_type选择合适的format,然后根据模板后缀的renderer调用合适的渲染引擎。

◆ show.erb: 所有格式都使用此模板,使用ERB进行解析。

◆ index.atom.builder:针对application/atom+xml格式,使用Builder引擎,相当于1.x中的rxml。

◆ edit.iphone.haml:针对自定义的Mime::IPHONE格式,使用HAML模板引擎(需要自己安装)渲染。

  Rails2.0鼓励开发者定义自己的MIME类型,所有新生成的应用的config目录下都将新增一个initializers/mime_types.rb的文件,你可以通过这个文件定义你自己的Mime类型。

  移植

  移植(Migration)现在功能更强大了,你不用再一遍遍的重复t.column:xxx,:xxx了,Rails2.0让你可以使用 t.string:column_name来创建新的table。

  同时,你也可以直接通过model/scaffold generator来自动生成migration文件,新的model/scaffold generator支持通过key:value pairs来为你自动生成migration文件,因此只需执行:

scrīpt/generate model post user_id:integer title:string content:text

rake db:migrate

一个包含user_id,title,content字段的posts表就已经躺在你的数据库里了。

  Rails2.0 的migration generator也做了改进,它变得更智能了,比如它会根据你起的文件名AddSomeStuff-ToCustomers,猜出你想要向 customers表中添加一些字段,从而根据后面的key:value pairs自动为你生成migration文件。

  其它新特性

新的Rake Tasks

Rails2.0新增了许多很实用的rake tasks:

rake routes:打印当前路由列表;

rake db:drop, rake db:drop:all, 删除当前环境或config/database.yml中的所有数据库;

rake db:create, rake db:create:all,创建当前环境数据库或或config/database.yml中的所有数据库;

rake db:version,显示当前环境数据库的schema版本号;

rake db:reset, 删除并重新创建当前环境的数据库。

HTTP Basic认证

  Rails2.0新增了一个模块用于处理HTTP认证,新的模块使用相当简单,你可以通过传递给authenticate_or_ request_with_http_basic方法的Block来决定是否允许用户访问当前的action。

  性能优化

  Rails2.0在性能方面做了不少改进:

  Rails2.0通过合并JS和CSS文件对页面的加载速度进行了优化,在产品模式下,所有的JS和CSS文件都将被合并为一个all.js和all.css文件,但是在开发模式下,则不变化。

  同时,针对某些浏览器不愿意在同一时间发送太多请求到同一个域,Rails2.0提供了一个很简单的方法来欺骗浏览器。

  你只需要设置 ActionController::Base.asset_host = “assets%d.example.com”,Rails就会自动将你的链接(比如image)分散到从asset1到asset4的4个域中,从而提高浏览器的并发。

  另外一个值得称道的性能改进就是增加了Query Cache,虽然目前还有局限,比如不支持:include等等,但这毕竟是个好的开始。

  同时 fixture的性能也得到了增强,比1.x提高了50-100%。

  更简单的异常处理

  尽管Rails已经对大多数常见异常在action之上进行了处理,并且你也可以使用 rescue_action_in_public来覆盖通用的处理,但rescue_action_ in_public要求你必须有一个case语句,并且必须调用super,Rails2.0提供了一个新的 rescue_from方法,使用它,你可以更简单的对异常进行处理:

  rescue_from User::NotAuthorized, :with => :deny_access

  一旦出现异常,deny_access将被调用,但是Rails对于这个自定义的方法没有任何限制。

  安全

  安全一直都是Rails的重中之重,Rails2.0在安全方面当然也做了大量改进:

  首先,通过在form中增加特殊字段来防止CRSF攻击,这一功能在新应用中默认是开启的。

  同时,Rails2.0对XSS攻击的防范也得到增强,TextHelper#sanitize由黑名单改为了白名单实现。

  Rails2.0还新增了对HTTP only cookies的支持。尽管现在并非所有浏览器都支持这一特性,但还是应该提前做好准备。

  插件

  除了将一些原本内置的特性改为插件(比如acts_as_list等)之外,Rails2.0对插件的控制更为灵活了,你可以通过config.plugins来控制加载那些插件以及以什么顺序来加载。

  商业数据库支持

  Rails2.0 中,商业数据库的适配器被移出了Rails核心,只剩下MySQL, SQLite 和 PostgreSQL,如果你使用的不是这三种开源数据库,那么你需要自己通过gem来安装这些商业数据库的适配器,它们的命名遵照 activerecord-XYZ-adapter,比如activerecord-oracle-adapter。

  启动设置

  修改environment.rb是不是常常让你头大,或者仅仅只是看着日益庞大的 environment.rb 而感到无奈。Rails2.0提供了一个config/initializer目录,所有放置于这个目录下的.rb文件都会在Rails启动成功后得到顺序执 行,因此现在你可以将你的启动脚本分成若干分,并给它们起个名字了。

来自:软件世界 张元一

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-15  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 142025
  • 日志数: 566
  • 图片数: 2
  • 文件数: 21
  • 建立时间: 2006-07-04
  • 更新时间: 2008-10-13

RSS订阅

Open Toolbar