怎樣 SETUP 好你的 production 環境的指南

Set Up Your Server Right, Part 1

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

用 Git 管理 Rails Project 的一些基本指令和 Workflow,一樣也出自 Rails Undergroud。

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

Rails Undergroud 上的投影片。會收這篇主要是因為教導了如何在翻譯檔裡下條件式判斷...

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

這是 RubyKaigi 2009 上的演講,是一份指導寫出高品質的 Ruby on Rails 的投影片。對新手很有幫助。

這裡也有人對這份投影片做了摘要

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

rails-nginx-passenger-ubuntu

Ubuntu / Debian ,尤其是 Debian ...在 setup 基本環境時,用預設的 apt-get 安裝 ruby & rails 環境以及一些常用的 gem(如 RMagick),會有一堆奇怪的相依性問題。

有人整理了使用這份 recipes,照著裝會相當順利 ...。裡面也附贈了啟動/關閉 nginx 的 script,使用時要記得修改套件的路徑。

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

yougotrails.png

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

Roodi parses your code and warns you about design problems.

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

Flay finds code duplication in your project.

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

原文刊載於 EngineYard

1) Cache, cache, cache and more cache.
能 Cache 的盡量 cache,不論是 Client Caching 或者是 Server-side Caching。

2) Segregate data and data serving
別為了方便就只用一個 DB 硬撐。把靜態檔案能扔上 CDN (S3, Akamai ...)的就扔。一些特定的簡單 model 可以考慮拆開用 key-value 的 data store 作...

3) Minimize & handle external dependencies
降低對於 external sites 的 dependencies, 例如抓外界 RSS 這件事,因為太不可預期了....

4) Tend your database and your job handlers
檢視 SQL Query 與 背景工作所消耗的資源量...

5) Shard your unavoidably relational data

對 DB 作 Sharding 。

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

原文連結

上一篇提及了一些入門必練的基礎。而現在要繼續寫的是進階篇。大致分為兩個方向:隨心所欲整合 / 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) 人氣()

«12 3