目前分類:General Turtorial (3)

瀏覽方式: 標題列表 簡短摘要
Jetpack Blog 10/14 整理了一篇 High Quality Ruby on Rails Example Applications

練功時可以參考別人的寫法

xdite 發表在 痞客邦 留言(10) 人氣()

原文連結

上一篇提及了一些入門必練的基礎。而現在要繼續寫的是進階篇。大致分為兩個方向:隨心所欲整合 / Scale 與 Deploy

* 隨心所欲的整合

1. 認識更多的 Plugin / Gem,減少重造輪子的機會
Gem / Plugin 的擴充性一向對 Rails 的開發加速作用有大大的加分效果。
- GithubRubyForge
- RailsEnvy 每週介紹 新穎 / 亮眼 / 實用 / whatever 的 gem / plugin 與新知

2. 可以移植到其他專案的好用 code,重寫成 plugin 或者 porting 成 Rails Engine。撰寫自己的 Template
Plugin Patterns (Peepcode) 想學會寫 Rails plugin 請看這份 PDF 。
Rails Engine # 把以前的 app 當成一個 plugin 使用
Rails Template # 每次開專案都會安裝的套件以及執行的動作寫成 Template

3. 開發自己的 View Helper 以及 Form builder
Rails 不僅僅提供好用的 helper,甚至你可以利用 Rails 提供的 API 撰寫自己的 Helper 和 Builder。為自己的專案套上 standard layout 以及減少寫噁心 html 的機會。
handicaft_interfaces
handicraft_ujs
handicraft_helper

建議閱讀 ihower 在上次 Ruby Tuesday 釋出的 Building Web Interface on Rails,以及把玩 ihower 在 github 上提供的 demo application。這次的 demo 含了 Rails3 提供的 Unobtrusive Javascript 的概念實作,使用 jQuery on Rails 作為範例。

4. 對於各項第三方整合方案的熟悉

Rails 只是一套網頁框架,但它並不是阿拉丁神燈。比如說你需要搜尋功能、付款功能、寄送簡訊、與 IM 整合 ...。Rails 當然 ....*不可能* 內建。雖然比較少書籍在介紹這方面的資訊,但是有幾個 Site 出了不錯的 Video Turtorial(付費 / 不付費都有..)。

Peepcode
Railscasts
AsciiCasts # Railscasts 的圖文教學版 ...

Railskits # 當然你有能力開發、有能力改,但沒時間從頭開發,也可以從這裡買 Solution 回去改 ...

5. Deep in Ruby / Rails
Advanced Rails (O’Reilly) 難得真的有 Advanced 到的書
Writing Efficient Ruby Code (Addison Wesley shortcut PDF)
Code Review (Peepcode)





* Scale 與 Deploy


當站大了(code 變多, query 變多 , 活動變多 ) 以後就會遇到架構複雜 / 速度慢的問題。有幾個方向是可以鑽研的

1. 換掉 Ruby
well ... Ruby 有很多種版本,也許你可以嘗試換上 Ruby Enterprise 節省記憶體以及改善 GC 。

2. 嘗試不同的 Web Server / Rails Web server,找出最適合的搭配
Mongrel / Thin / mod_rails / FastCGI + Apache / Nginx / lighthttpd 都是可以嘗試的組合。

3. 使用 Rails Metal 或拆散架構
Rails 不是萬能框架,也沒必要用 Rails 這種肥重框架單做簡單的事(如 API 的提供)。能改用其他語言或其他框架(Sinatra)都是可以嘗試的方法 ...。
Sinatra with ActiveRecord 的整合方法,我寫了一份 demo 放在 github 上。

4. 檢視 SQL Query 與 Code 效率
可以使用 NewRelic RPM ,監視整個網站。找出下的不好的 query,或者是寫的不好的 ORM 語法改善。

關於 ActiveRecord 的基礎與進階可以參考 RailsEnvy 出的 Advanced ActiveRecord 和 Pragprog 出的 Everyday ActiveRecord。少用 join,多用幾個 select 達到同樣的效果,必要時自己手寫 query...

Code 效率可參考 "Deep in Ruby / Rails" 的書單 ...

5. Scaling Rails
看完照著 tune,能 cache 的就 cache ..

6. Monitor
Hoptoad #500 自動寄信 / 整理 log
God # 監視誰死掉了,記憶體吃太多,自動重開 ....

7. Deploy
機器很多架構複雜,update code 重開麻煩。就寫個 Capistrano Recipes 幫你的忙吧 ...。也可搭配 Chef

8. EC2onrails
懶人架構,前提是要熟 EC2 與 Capistrano ...

9. 雲端:Heroku / GAE
有興趣可以參考上個月我寫的這一篇的 Sinatra on the Cloud



其他 Scale 和架構 design 的東西就都屬於 General Scaling Knowledge,就不在這篇專講 Rails 的文章詳述下去...。

* 總結

練到最後其實就是固定訂一些重要的 feed 來看,有新東西就練和寫心得 ...這樣會進步的非常快。只看書當然不可能比直接看 API 和 blog post 學的快...
介紹幾個消息來源是值得訂的:


RailsEnvy
Ruby on Rails Official Blog
RubyInside
Dr. Nic
Yahuda Katz
Rick Olson



每一次當 Rails 界舉辦 Conf ,例如 RailsConf 2009 或者是 Acts as Conference 2009,其實也都還蠻多 slides 和 video 可以看,看完以後知識會長不少 ....


railsconf 2009 的 videoslides
act_as_conf 2009 的 video



希望提供這些資訊能讓大家對學習和練習有個方向....

xdite 發表在 痞客邦 留言(0) 人氣()

原文連結

不知不覺,時間已經邁入 2009 。ihower 和我前陣子就在商量,又過了一年,我們是不是應該又要來寫一篇書單來 Update 了。

但老實講,Rails 這個框架發展至今,其實已經越來越成熟穩定了,書其實也出差不多齊了,推來推去也那幾本。想了一想,今年這篇文章我便想改轉以學習順序與開發中需要的技巧/技術為導向,推薦各種學習上的資源,來獲得更有效的進步。

* Requirement Skill

這次的學習指南,將不再策重中文書以及中文文件的推薦。相反的,因為長期以來,許多在新手求助區發問的問題,絕大多數都是 *缺乏基本常識* 以及 *看不懂 Log / 文件* 所導致。這是即使提供中文資源也無法解決的狀況。因此在前面我先直接闡述一個重點,如果學習者沒有以下 background knowledge。我會建議你直接放棄學習 Ruby on Rails。(以後會另外開篇文章解釋)

1. LAMP background / Web Development Background
2. svn / git 基本操作
3. 英文技術文件閱讀能力 / 英文 Log 閱讀能力
4. 至少會寫一種 scripting language ( Perl / Python / Ruby ...)
5. 願意花時間練習





* First Step


初期學習 Ruby on Rails 的途徑,筆者 prefer 以幾個方向開始打基礎。

1. 初步瞭解 Ruby / RubyGems / Rails / Rails Plugin 之間的關係
2. 初步瞭解 Rails 目錄結構
- 至少有辦法在 Linux 上裝起 Ruby / Rails,新增一個 project ,接起 database
3. 學習用 Rails CRUD 以及搞懂 MVC 架構的運作
- 至少有辦法寫出基本 BLOG 的 CRUD
- 透過 CRUD 的操作瞭解 Rails 的 form 以及 ORM ( ActiveRecord ) 的簡單概念
4. 初步瞭解 Rails RESTful 的概念,以及練習如何在 Rails 使用 RESTful / Non-Restful (搞懂 routes)的方式練習 CRUD
5. 初步熟悉一些常用的 plugin:Restful Authenication(認證)、Attachment_fu(上傳檔案附件)、Will_Paginate(分頁)的安裝以及使用方式。
6. 學一些 Ruby 基本的語法。





以上這一些都有辦法從 blog 或 官方 Repository 的 README ,step by step 學到,暫時不需要買什麼書。把這一些功課練完,幾乎就掌握了 Rails 的一些開發基礎技能,差不多能開始寫點有趣的小東西....

至於 Ruby 的書推薦:Ruby Programming — 向 Ruby 之父學程式設計Programming Ruby 3nd edition


* Second Step

開始開發以後要繼續念/練的東西...

1. 進階 ActiveRecord
- 學習如何下 condition、name_scope、relation、Callback

2. 進階 ActionController
- filter、filter 搭配 resource(巢狀目錄)

3. 編寫自己的 helper,操作 partial
- 學習如何用 helper,把 view 裡面的混雜的邏輯與 html 處理乾淨

4. 熟悉 routing 與 respond_to 搭配 builder
- 練到想怎麼指就怎麼指
- 學會怎麼生 RSS / ATOM / csv / json

5. Library、Gem、Plugin 的搭配使用
- 依照自己的需求上 GithubRubyForge 找適合自己的 gem / plugin ,或者上 Dzone 找 Library 搭配自己的 Application 開發。節省重新造輪子的時間。

6. RJS
- Ajax .....

7. I18n
- 學會怎麼使用與操作 Rails 內建的 I18n

8. Deployment
- Mongrel / Thin / mod_rails 的使用
- Capistrano Recipes 的撰寫

9. Mailer 與 Observer
- 寄信

10. Asynchronous jobs
- Daemon 與 Queue

11. Ruby for Rails
- 就是熟悉 Ruby for Rails XD



推薦:

Agile Web Development with Rails, Third Edition
這是 Rails 界的聖經,由 DHH (Rails 之父)主筆。內附基本開發實例,以及詳述 Rails 常用 API 。目前這本書的第三版跟進到 Rails 2.2.2 。

Rails way
新 Rails 聖經 枕頭書。看完整本絕對超熟 Rails ,可惜沒幾個人有耐性看完....XD

Ruby for Rails
這本書是專為 Rails 開發者所寫,作者特別把開發 Rails 所需的 ruby 語法和概念,搭配 rails 做整合性的講解。(才不會發生怎麼蓋高樓,卻根本不懂建築原理的情形。這樣房子會倒的啊啊啊啊....)

Deploying Rails Applications: A Step-by-Step Guide
Deploy Rails Application 的教學書籍。如果對 Deploy 策略不熟的可以買來看看補充常識。如果熟的應該看大家平常的討論應該就夠了....

Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps
這本書強烈建議購入,每一章都精彩。比較進階的開發進巧,比如:寄信、Nested Forms、 Asynchronous jobs 的作法 大概都有提...

RJS Templates for Rails (O’Reilly shortcut PDF)
蠻不錯的 RJS PDF

Rails 2.2 Release Notes
Rails 2.3 Release Notes

Rails 本身是一個觀念與架構都進步十分迅速的 framework,只看書其實不太足夠,進度也跟不太上。加上 Rails 後來更組織了專門寫 Document 的團隊,近幾個版本的 Release Note 都寫得相當好以及清楚。Rails 2.3 的 Release Note 更簡直像一本小教書,許多 feature 以及使用方法都解釋的十分清楚。如果想瞭解新 feature,直接看 Release Note 現在是我相當推薦的方法...



下一篇會繼續寫的是如何進階 Ruby on Rails 以及推薦閱覽練習的材料...。

xdite 發表在 痞客邦 留言(1) 人氣()