<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    (轉)Rails3 Beta發布 新特性概覽

    Posted on 2010-02-24 12:09 啥都寫點 閱讀(269) 評論(0)  編輯  收藏 所屬分類: others

    【Csdn.net 2月24日】感謝@ihower為CSDN提供的文章,寫得非常詳細。

    Beginning

    從Merb 和Rails 決定合 并開始,過了一年多的努力終于發布Beta 版啦。 Rails3 最重要的人物就是總架構師Yehuda Katz了, 整個把Rails core翻了好幾翻,徹底改頭換面。

    Why? 我是這么想的,DHH 一開始開發Rails 的時候,Ruby 社群還不像現在這么發達,所以很多事情必須自己造(連prototype都 是為了Rails 而造的),為了達到非常容易設定跟快速開發的理想,得包山包海什么功能都要做,再加上有限的資源,造成了Rails core 其實綁得很緊,基本上就是一整包給你。要修改擴充它,常常就必須monkeypatch 一下。另一方面,對怎樣的Ruby 程式是好程式,一開始也沒有這么多人想清楚,例如Rails core 充滿了alias_method_chain,這件事情現在也被認為是比較不好的寫法。

    Rails3 的時代不同了,Ruby 社群起來了。我們有標準的Rack介 面、我們有不同的ORM甚至是NoSQL 的儲存庫、我們有不同JS Libary、我們有不同測試方式RSpec、我們也有許多現成不需要自己造的新函式庫。 Rails3 基本上就是這么一個接近改掉重寫的版本,但是以重構的方式達成了這個兼容并蓄的目標:將API 重新厘清、徹底模組化、低耦合度元件、大幅提升效能等。具體來說,有幾個成果:

    用 Ruby 1.8.7 或 Ruby 1.9

    1.9 的時代終于要來臨了:) 可以復習一下我去年演講的投影片

    Dependencies 管理

    本來的config.gem 換成新的Bundler來 管理所有用到的函式庫,使用新的Gemfiles 格式,本來的config.gem sucks問題多功能有限。現在,我們真的做到可以完全不依靠系統gems。可以參考這篇Bundle me some Rails示范Bundle的用法

    新的 Routes

    由于全面導入Rack 的關系,現在的Route 其實也是一個Rack middleware,實作上就是rack-mount。新的Route 第一眼看到就是API 的改變了,可以參考這篇Revamped Routes in Rails 3, 不過這其實不是最重要的地方,最厲害的地方是,它參數:to 接的端點其實是rack端點,而main#home是MainController.action(:home) 的簡寫( 是的!! Rails3 中每個Controller actions 全都是一個標準的Rack app!! 超酷!!),可以看看Yehuda 的實 作說明。既然是Rack端點,我們就可以給它接其他Rack app,例如Sinatra,這一篇就示范了怎么接Rails 3 Routing with Rack,真是超級簡單啊。我們可以預期,會有更多有趣的Rack middlewares可以與Rails結合。

    另外,我們也可以直接在Routes 層直接辦到redirect和render template,可以看看Yehuda的實作說明:Generic Actions in Rails 3,基本上就是簡單的Rack middleware。

    新的 Active Model

    為了達到與不同ORM 銜接的目標,Rails3 的ActiveModel 將本來的ActiveRecord 的個別功能抽出來成為Module,例如callbacks, validations, serialization, observing, dirty tracking 等。任何Class 只要符合ActiveModel 定義的幾個API,再加上include 你需要的Module,就可以與Rails3 接在一起了。請參閱ActiveModel: Make Any Ruby Object Feel Like ActiveRecord

    其中Validation 有新的API,請參閱validates :rails_3, :awesome => true

    ActiveRecord

    那ActiveRecord 本身呢? 引入了ARel這 套SQL 產生工具(why Arel?),大幅采用“method chain” 的串接用法,讓每個操作都變成了scope。

    ActiveRecord 因此也有了新的API: Active Record Query Interface 3.0

    ActionController

    Responder 帶來了respond_with,可以簡化controller 的寫法,用法參考Cleaner RESTful Controllers w/ respond_withDefault RESTful RenderingThree reasons to love ActionController::Responder這幾篇。這工具非常有趣,我之前甚至寫了一個 plugin respond_methods來 讓Rails 2.x 支援這個功能。

    另外,新的Render 實作可以讓你輕易擴展,這一篇Render Options in Rails 3 示范了怎么做出你自己的render :pdf。

    ActionView

    幾個大的改變:

    1. 采用Erubis實作
    2. 預設XSS protection 打開,再也不用忘記加上h 逸出了。請參考SafeBuffers and Rails 3.0有更多細節。
    3. 將 所有JavaScript helpers 改成unobtrusive。你會發現Rails3 的public/javascripts 多了一個rails.js,這就是一個JS driver,預設是接prototype.js,要換成jQuery 非常簡單,只要用jQuery 版本的rails.js就 可以了。因此本來的一些Ajax Helper就被移除了,有需要的話可以在prototype_legacy_helper plugin找回來。
    4. Helpers 預設輸出格式是 HTML 5。

    說到HTML5,我另外推薦這份閱讀材料Dive into HTML5以及HTML 5 Demos and Examples

    ActionMailer

    首先底層換成Mail這套工具了,可以參考這篇介紹。 接著,受益于Controller的重構成果,新的ActionMailer終于和Controller 繼承自同一個AbstractController,讓ActionMailer的功能增加不少,也大大的DRY了。

    新的API 請參考New ActionMailer API in Rails 3.0

    最后它的位置改放在app/mailers 了,放在app/models 下實在讓人搞混啊。

    ActiveSupport

    之前的ActiveSupport 有個討厭的地方是,如果你只想要用到其中的幾個功能,很不容易搞懂到底要require 哪些東西,最后只好通通載入以求保險。新的Rails3 把這件事情弄清楚了,你可以只載入你要的部分。

    Rails Application object

    為了讓一個Process 可以跑多個Rails app,Rails3 使用了一個Rails Application 物件來表示一整個Application 的所有設定,因此本來的config/environment.rb 的功能,幾乎都搬到config/application.rb 了。另外,Rack 的標準config.ru 檔案也被加到了根目錄,因此要特別注意到你的Application 名稱,這會是跟其他Application 互動時使用的名稱,預設是目錄的名字。

    新的Rails Module

    幾個常數被拿掉了,RAILS_ROOT 要改用Rails.root、RAILS_ENV 要改用Rails.env、RAILS_DEFAULT_LOGGER 要改用Rails.logger 等,詳細請參閱這篇The Rails Module (in Rails 3)。改成物件的好處是,我們就不需要做字串操作這種事情了。

    新的 rails 指令

    本來的script/* 指令全部拿掉了,都改成用rails。例如script/console 變成rails console (可以簡寫成rails c)、script/generate 變成rails generate (可以簡寫成rails g)、script/server 變成rails server(可以簡寫成rails s)。使用 rails –help 可以看到完整說明。

    推薦閱讀

    Rails3 的閱讀資料非常多,官方的Rails 3.0: Release Notes是必讀。如果你從升級的方向切入,可以使用官方的升級Plugin rails-upgrade is now an official plugin,它可以幫助你:

    1. 檢查需要升級的地方
    2. 產生Gemfile
    3. 產生新的routes.rb

    請搭配這篇The Path to Rails 3: Approaching the upgrade服用。不過,嗯,現在還是不要在Production環境 上升級比較好,畢竟很多Plugin 還沒跟上來哩(可以看看Is Your Plugin Ready For Rails 3? Rails Wiki有整理哪些Plugins OK 了)。

    如果是從重新開始會容易得多,可以看The Path to Rails 3: Greenfielding new apps with the Rails 3 beta這篇。十分建 議你有空的話,現在就可以開始玩玩看了。

    如果想多了解Rails 的架構,有幾篇文章可以看看:

    最后,如果你還想找更多,英文的懶人包有:Rails 3.0 Beta: 36 Links and Resources To Get You GoingRails 3 Reading MaterialOn the way to Rails 3 – a link list



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 亚洲第一区精品观看| 久久精品亚洲一区二区三区浴池| 一本久久综合亚洲鲁鲁五月天| 亚洲一区二区女搞男| 亚洲一级特黄特黄的大片| 老司机精品免费视频| 成人免费无毒在线观看网站| 亚洲乱亚洲乱妇无码麻豆| 久久精品无码免费不卡| 国产成人免费a在线视频app| 亚洲精品第五页中文字幕| 中文字幕无码免费久久9一区9| 久久亚洲av无码精品浪潮| 狠狠综合亚洲综合亚洲色| 永久免费在线观看视频| 丁香五月亚洲综合深深爱| 亚洲精品无码你懂的| 在线精品一卡乱码免费| 亚洲AV乱码久久精品蜜桃 | 亚洲伦理中文字幕| 四虎国产精品免费久久| 亚洲黑人嫩小videos| 永久免费A∨片在线观看| 国产亚洲av片在线观看18女人 | 亚洲国产综合久久天堂| 老牛精品亚洲成av人片| 亚洲一区二区视频在线观看| 香蕉视频亚洲一级| 亚洲线精品一区二区三区| 亚洲一级免费毛片| 亚洲人成在线观看| 美女视频黄a视频全免费网站色窝| 亚洲女人被黑人巨大进入| 光棍天堂免费手机观看在线观看| 亚洲欧洲日本天天堂在线观看| 免费不卡在线观看AV| 亚洲欭美日韩颜射在线二| 国产免费女女脚奴视频网| 自拍偷自拍亚洲精品播放| 久久亚洲AV成人无码国产| 日本午夜免费福利视频|