Ruby開發(fā)者應(yīng)該熟悉的10個工具
1. Git
Git 是進(jìn)入Ruby 這個生態(tài)圈首先最應(yīng)該學(xué)會的工具。幾乎所有以Ruby 開發(fā)出來的套件都放在Github 上。也就是不管你要下載或修改協(xié)作都需要透過Git。
2. RVM
Ruby 有很多種 implementation,比較多人在使用的有
◆ 標(biāo)準(zhǔn)的 MRI Ruby 1.8.7
◆ 標(biāo)準(zhǔn)的 MRI Ruby 1.9.2
◆ REE ( Ruby Enterprise Edition)
◆ JRuby 等等
其實你用哪一種版本開發(fā)都無所謂,不過目前有一些project 只能在 Ruby 1.9.2 上執(zhí)行。切換 Ruby 環(huán)境跑實驗 project 在之前的時代是一件很痛苦的事。
所以有人發(fā)明了RVM,讓開發(fā)者可以無痛的可以切換各種Ruby 環(huán)境,甚至透過RVM 制造出獨立的 Gemset 環(huán)境,無負(fù)擔(dān)的盡情實驗新工具。
3. Mac
不可否認(rèn)的開發(fā)Ruby 程式,Mac 是第一首選環(huán)境。
最初的原因是撰寫Ruby / Rails 的利器: TextMate http://marcomates.com/ ,是 Mac 上的軟體。而后來使用 Mac 開發(fā) Ruby 程式的開發(fā)者越來越多,更加深這種情況, 造成一些實戰(zhàn) best practices 以及友善的開發(fā)工具,幾乎都以 Mac 為優(yōu)先或唯一平臺發(fā)佈,如:Pow 與 Homebrew。
4. Homebrew
原先在Mac 上,套件管理幾乎是 Macports 與 Fink 的天下。但這兩者因為 dependency 處理不佳,加上需要 sudo 執(zhí)行。某些時候會造成套件管理上的災(zāi)難。 在 OSX 10.6 之后的時代,就逐漸被后起之秀 Homebrew 取代。
Homebrew 有兩大極優(yōu)秀之點:
by user,不需 sudo 就可以安裝套件。不會把檔案權(quán)限搞得一團(tuán)臟。
更新迅速以及乾凈。Homebrew 是 git-based 的 fomula sets,透過預(yù)設(shè)的 fomula 安裝程式。
安裝時如果發(fā)現(xiàn)有錯誤,可以自行修改,并透過 Github 的功能發(fā) pull request 要求管理者 patch。用 Homebrew 建置出來的 Rails 開發(fā)環(huán)境通常極為乾凈且無惱人的套件 bug。
( Rails developer 最常會撞雷的兩大套件:MySQL 與 ImageMagick 在 brew 上裝,幾乎沒什么問題…)[註1]
5. Pow
這是由 37signals 所開發(fā)出來的網(wǎng)頁伺服器,可以跑任何 Rack Based 的網(wǎng)頁程式。特點是,你可以把某個開發(fā)中的 project,如:wiki,symlink 到自己的家目錄底下的 .pow/ 資料夾。
- $ cd ~/.pow
- $ ln -s ~/projects/wiki
再打開瀏覽器上的 http://wiki.dev/,就可以把 projects 掛起來了。
(塬理是攔截對 port 80 上的 request 導(dǎo)回 Pow)
在從前,如果你要掛上 projects,通常得自己改 local 的 apache conf 和 /etc/hosts 加上設(shè)定。掛起、移除、重開都非常麻煩。
而 Pow 的誕生,讓常常追許多新玩意的開發(fā)者,實驗的成本變得極度低廉。
6. Rack
Rack 是一個 Ruby 套件,也同時是 Ruby 界的網(wǎng)頁程式標(biāo)準(zhǔn)interface。背后的想法與塬理可以參考我以前寫的一篇舊文 Rack 與 Rack middleware。
現(xiàn)在只要看以 Ruby 開發(fā)的網(wǎng)站程式,幾乎都支援 Rack。不會再有以前哪一套框架,推薦獨家使用哪一套 web server 跑的亂象。
而因為有了 Pow,掛起 Rack-based 的網(wǎng)站實驗程式成本也很低廉。
同時因為採用 Rack 架構(gòu)開發(fā)的緣故,開發(fā)者可以透過 Rack middleware 外掛實作一些框架或程式?jīng)]有的功能。
比如說:
◆ rack-now-www 硬是干掉網(wǎng)址的 www
◆ rack-rewrite 在不支援 .htaccess 的環(huán)境下,直接使用 rack 硬 rewrite routing
也很自然而然的會知道:
◆ 想惡搞,改 config.ru
◆ 想重開,touch tmp/restart.txt
這些潛規(guī)則。
7.Bundler
Bundler 塬先是 Rails3 架構(gòu)師 Yehuda Katz 開發(fā)出來解決 Rails 中 package dependency 的工具( 在開發(fā) Merb 這個 framework 時,Katz 就開始嘗試實作了)。
package dependency 一直是相當(dāng)麻煩的問題。解不開,就無法將程式 boot 起來。
塬先大家也只有拿 Bundler 搭配 Rails 使用。
而后來 Bundler 也逐漸變成一般 Ruby 程式中預(yù)設(shè)的套件 dependency 管理程式。
Bundler 中的 Gemfile 設(shè)計,不只能讓開發(fā)者能夠輕易的解決套件相依問題,并且可以直接引入「開發(fā)中」套件,解決 3rd gem 版本更新過慢,卡住自己開發(fā)進(jìn)度的問題。
- gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git'
- gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:branch => 'stable-2'
- gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:tag => 'tag-2'
- gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git',:ref => '23456'
8. Guard
在開發(fā)網(wǎng)頁程式時,開發(fā)者很常重復(fù)這樣的動作:寫一寫 -> run test -> refresh web browser -> 繼續(xù)修改 -> run test -> refresh browser
這些都是很機械式的行為,非常煩人。
有沒有辦法只要「檔案變更,就自動作事」呢?
Guard 就是這樣的一套工具。
有趣的是,Guard 剛推出時,其實也只單純是一套監(jiān)視檔案工具變動的工具,你可以透過寫 Guardfile,去自由監(jiān)視需要監(jiān)視的資料夾,再 do something。而因為 Guard 架構(gòu)算設(shè)計的不錯,后來許多開發(fā)者更基于 Guard 做出更多其他的 rubygems。
guard-livereload 就是一個例子。
9. LiveReload
修改網(wǎng)頁 => refresh browser 是剛剛所提到的煩人事之一。
LiveReload 提供了監(jiān)視檔案變動,并通知 browser reload 的功能。
開發(fā)者如果螢?zāi)粔虼蟮脑?,可以同時開著文字編輯器與 browser,修改的任何變動馬上即時顯示在 browser 上。
值得一提的是,LiveReload 在 10.7 以后是 broken 的。因此后來有人利用 guard 實作出了 guard-livereload 作為替代品。
10. Sass / SCSS / Compass
自從 Rails 3.1 引入 SCSS 作為Asset Pipeline 當(dāng)中的選項之后,這套本來沒多少開發(fā)者知道的 CSS framework 就開始瘋狂走紅。
SCSS 的塬理是透過寫編寫「巢狀」的 style,取代塬本需要寫 CSS 時需要一直復(fù)製 DOM 結(jié)構(gòu)名稱的動作。并且支援變數(shù)、數(shù)學(xué)、繼承、mixin 等功能…
如:
SCSS
- $border-color: #3bbfce;
- $link-color: #3bbfcf;
- .content
- { border-color: $border-color;
- a{color: $link-color}
- }
可以生成
CSS
- .content{ border-color: #3bbfce; }
- .content a{color: #3bbfcf; }
而 Comass 是基于 SCSS 的 Framework。提供了更進(jìn)一步的許多暴力 feature。
有些人可能會搞不清楚 SASS / SCSS / Compass 的關(guān)係。如果你有興趣的話,可以參考我在 Upgrade2Rails31 這個 project 中寫的兩篇文章:Sass/SCSS 以及 Compass。
原文:http://blog.xdite.net/posts/2011/10/09/10-ruby-developer-must-have-tools/
【編輯推薦】