Update(2008/6/25): 提昇 MacOS 開發爽度請裝 Pane Putting the pane back into deployment
Update(2008/5/24): 更多參考連結 28 mod_rails / Passenger Resources To Help You Deploy Rails Applications Faster
mod_rails(學名是 Passenger) 出來一段時間了,陸續開始有些使用經驗分享出來,在 production 上還蠻適合RAM有限的 VPS 環境,而這篇 Ask Your Doctor About mod_rails則介紹 mod_rails 也十分適合拿來當做 development 環境,也讓我十分心動:
- 厭倦每次都得 mongral_rails start 或 script/server?而且還要佔 terminal tabs。像我手上同時間好幾個案子(?!),常常要切來切去還挺麻煩的。有了 mod_rails 設定好之後,每個網站都隨時 ready 可以用。(怕 memory 浪費?mod_rails 可以經由設定 RailsPoolIdleTime, RailsMaxPoolSize 來限制 process 存在的時間跟數量)
- 單一 mongrel process 沒辦法平行處理 requests,當網站圖片東西比較多的時候,速度就慢了。而 mod_rails 在有額外的 request 需求時,會 new process 來支援。
- 有 Apache 就可以設定 SSL,只用 mongrel 沒辦法測試 HTTPS 連線。
心動了當然得馬上行動,參考了這篇 Using Passenger on OSX for Rails development,我很順利地在我的 Mac Leopard 上架了起來:
1.安裝 Passenger:
gem install passenger
passenger-install-apache2-module
2.設定 Apache,編輯 /etc/apache2/httpd.conf 或 /etc/apache2/users/ihower.conf,以下是一個範例 (前三行請參考執行 passenger-install-apache2-module 時顯示的訊息) :
LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-2.0.1/ext/apache2/mod_passenger.so
PassengerRoot /opt/local/lib/ruby/gems/1.8/gems/passenger-2.0.1
PassengerRuby /opt/local/bin/ruby
PassengerMaxPoolSize 3
PassengerPoolIdleTime 300
RailsEnv development
<Directory "/Users/ihower/RailsCode">
Order allow,deny
Allow from all
</Directory>
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/Users/ihower/RailsCode/project1/public"
ServerName project1.local
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/ihower/RailsCode/project2/public"
ServerName project2.local
</VirtualHost>
- 設定 /etc/hosts 指定本地端 domain:
127.0.0.1 project1.local
127.0.0.1 project2.local
4.打開 Mac 上的 System Preferences ➔ Sharing ➔ Web Sharing,啟動 Apache。
5.打開你的瀏覽器,輸入 project1.local, project2.local 順利的話就可以看到啦。
問: 修改了 /vendor/ 下面的東西要重新載入怎麼辦?
答:mod_rails 的用法挺有趣的,請執行:
touch tmp/restart.txt
如果要一直修改 vendor 的話(在寫plugin嗎?),可以下載 Automation with RStakeout,然後執行:
ruby rstakeout.rb "touch tmp/restart.txt" "vendor/**/*"
這樣一有更動就會reload了,cool。
建議/etc/apache2/httpd.conf在加一個設定
PassengerDefaultUser www-data
www-data就是執行apache2的user