Rails3 Beta 發佈: 重點導讀 [轉]

Rails3 Beta 發佈: 重點導讀 [轉]

Rails 3 Beta Released

感謝@ihower文章 ,寫得非常詳細,我直接轉了過來,順便把繁體字轉 成簡體字了。

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

The End

Copy完成,再次感謝@ihower 。 那麼我也分享一個Rails 3 Beta的視頻教程,Rails 3 Beta and RVM By Ryan@RailsCasts

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章