Cyh的博客

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

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

          Posted on 2010-02-24 12:09 啥都寫點 閱讀(270) 評論(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



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 乳源| 略阳县| 榆中县| 陵水| 东平县| 衡阳市| 丰县| 马公市| 涟源市| 乌拉特前旗| 泸溪县| 黔西| 临泉县| 荔波县| 黑山县| 金乡县| 宝兴县| 达日县| 涿鹿县| 巴林右旗| 西充县| 盐津县| 离岛区| 清涧县| 志丹县| 吴堡县| 长宁县| 嘉兴市| 舞钢市| 鹤岗市| 墨竹工卡县| 双峰县| 松溪县| 山阴县| 溆浦县| 嵊泗县| 高雄县| 临朐县| 巴楚县| 都昌县| 株洲市|