顯示具有 mongrel 標籤的文章。 顯示所有文章
顯示具有 mongrel 標籤的文章。 顯示所有文章

1/04/2008

Rails Is A Ghetto

先說好,Mongrel 是一個 Team ,所以 Zed Shaw 的離開不代表 Mongrel 的停擺,不過該開始尋求更好的 Application Server 摟。

Zed Shaw (Mongrel 的作者)在去年的 12/15號宣告他封鍵盤,不再 Coding 了。然後又在去年的最後一天發表了一篇攻擊性言論相當強的文章,Rails is a Ghetto。裡面提到許多 Rails 社群的不良行為,並且用相當攻擊性的語氣來批評這些行為。這對 Rails 社群的確有很大的傷害,不過有多大那很難說。

Zed Shaw 宣佈他不是 Ruby Guy,並且想轉向 Python,Factor,Lua 等語言看看。
"This is that rant. It is part of my grand exit strategy from the Ruby and Rails community. I don't want to be a 'Ruby guy' anymore, and will probably start getting into more Python, Factor, and Lua in the coming months. I've got about three or four more projects in the works that will use all of those and not much Ruby planned. This rant is full of stories about companies and people who've either pissed in my cheerios somehow or screwed over friends. I can back all of them up from emails, IRC chat logs, or with witnesses. Nothing in here is a lie unless it's really obviously a lie through exaggeration, and there's a lot of my opinion as well."
大家想看去看原文吧 :) 。你不用去期待裡面有啥技術,Performance ,語言架構的比較。裡面只罵人跟公司(ThoughtWork)。我很不喜歡這篇文章,因為語氣不只是差,還有許多人身攻擊
Dave Thomas Ain’t No Sammy Sosa (He’s Just Fat)
之類的話語。更讓我覺得 Zed Shaw 的 EQ 似乎不是很好。

不過,Zed Shaw 對於 Ruby on Rails 的社群貢獻是毋庸置疑的,至少讓我對你唱一句
Goodbye My Love,我的愛人再見
祝你在新的社群有好的發展,還有 Ruby 社群沒有加蓋,你在外面受到不好的遭遇可以游回來呀。

10/30/2007

Mongrel 1.0.4 出了

    在歷經將近十個月的等待, Mongrel 終於推出了 1.0.3 版,當然依照慣例,很快的馬上就被抓到很多 Bug,隔天就出了 Mongrel 1.0.4 版。安裝方式官方建議是
    gem install mongrel --include-dependencies -P HighSecurity
    不過,最重要的是 release note 最後一句
    Mongrel 1.1 is coming real soon now with JRuby support and a few other things.
    所以,Mongrel 1.1 要出來了,並且還要加上 JRuby Support。

      8/14/2007

      Fedora Core 6 上安裝 beast

      我選擇 apache2.2 + mongrel_cluster + postgresql

      安裝 apache 和其他的東西。
      sudo yum install httpd
      sudo yum install httpd-devel
      sudo yum install openssl
      sudo yum install readline

      安裝 ruby
      sudo yum install ruby
      sudo yum install ruby-devel
      sudo yum install ruby-libs
      sudo yum install rdoc
      sudo yum install irb

      安裝 postgresql
      sudo yum install postgresql
      sudo yum install postgresql-devel
      sudo yum install postgresql-libs
      sudo yum install postgresql-server

      初始化 postgres
      sudo mkdir -p /var/db/postgresql81/defaultdb
      sudo chown postgres:postgres /var/db/postgresql81/defaultdb
      sudo -u postgres initdb -D /var/db/postgresql81/defaultdb
      sudo -u postgres pg_ctl -D /var/db/postgresql81/defaultdb \
      -l /var/db/postgresql81/defaultdb/postgres.log start

      拿來抓 beast... 捨 svn 取 svk 因為我討厭一堆 .svn
      sudo yum install perl-SVK

      sudo yum install rubygems

      至少要用這些 gem
      sudo gem install rails -y
      sudo gem install mongrel_cluster -y
      sudo gem install redcloth -y
      sudo gem install ruby-openid -y
      sudo gem install ruby-postgres -y

      建立目錄。
      mkdir -p ~/projects/beast
      cd ~/projects/beast

      用 svk 抓不會有一堆 .svn 礙眼。
      svk mirror //mirror/beast \
      http://svn.techno-weenie.net/projects/beast/branches/stable-1.0/
      svk sync -s HEAD //mirror/beast
      cd stable-1.0

      產生讓 beast 用的資料庫。
      sudo -u postgres createdb beast_prod

      設定資料庫設定檔。
      cp config/database.example.yml config/database.yml

      nano config/database.yml
      =========================
      production:
        database: beast_prod
        adapter: postgresql
        host: localhost
        username: postgres
        password:
      =========================

      初始化 beast 資料庫。
      rake db:schema:load RAILS_ENV=production

      非常囉唆的 cluster 設定,user 可以開 mongrel,
      不過因為我懶所以用自己的帳號跑。
      sudo mongrel_rails cluster::configure -e production \
      -p 2000 -N 3 -c /home/YOUR_NAME/projects/beast/stable-1.0 \
      -a 127.0.0.1 --user YOUR_NAME --group YOUR_NAME

      啟動 mongrel_cluster 吧。
      sudo mongrel_rails cluster::start

      接著是 apache2.2 的 mod_proxy_balancer 的設定,
      如果 mod_proxy_balancer 沒有啟動記得把他打開。

      建立 balancer 導向 port 2000~2002
      sudo nano /etc/httpd/conf/httpd.conf
      =====================================
      <Proxy balancer://YOUR_BALANCER>
        BalancerMember http://YOUR_ADDRESS:2000
        BalancerMember http://YOUR_ADDRESS:2001
        BalancerMember http://YOUR_ADDRESS:2002
      </Proxy>

      Listen 80
      <VirtualHost *:80>
        ServerAdmin YOUR_EMAIL
        ServerName YOUR_ADDRESS
        ProxyPass / balancer://YOUR_BALANCER/
        ProxyPassReverse / balancer://YOUR_BALANCER/
        ProxyPreserveHost on
        ErrorLog /home/YOUR_NAME/projects/beast/stable-1.0/log/apache_error.log
        CustomLog /home/YOUR_NAME/projects/beast/stable-1.0/log/apache_access.log combined

        ProxyPass /images !
        ProxyPass /stylesheets !
        ProxyPass /javascripts !
        Alias /images /home/YOUR_NAME/projects/beast/stable-1.0/public/images
        Alias /stylesheets /home/YOUR_NAME/projects/beast/stable-1.0/public/stylesheets
        Alias /javascripts /home/YOUR_NAME/projects/beast/stable-1.0/public/javascripts
      </VirtualHost>
      =====================================

      接著啟動 apache 就 ok 了。
      sudo apachectl start

      最後來設定 beast 的 smtp, 如果想用 gmail 寄信的話,
      我之前試過兩個方式,一個是使用 msmtp,
      另一個是有人有寫一小段 ssl smtp 的 patch, 可以參考這裡:
      http://www.stephenchu.com/2006/06/how-to-use-gmail-smtp-server-to-send.html

      nano config/environment.rb
      加入:
      ===========================
      ActionMailer::Base.smtp_settings = {
        :address => "smtp.gmail.com",
        :port => 587,
        :domain => 'YOUR_DOMAIN',
        :user_name => "YOUR_GMAIL_ACCOUNT",
        :password => 'YOUR_GMAIL_PASSWORD',
        :authentication => :plain
      }
      ===========================

      nano app/models/user_mailer.rb
      ===============================
      @from = 'YOUR_GMAIL_ACCOUNT@gmail.com'
      ===============================
      我不是很確定這一步要不要做,我猜不做會被 gamil 擋掉。

      接下來把那段程式碼 copy 到可以被 require 的地方,我是放在 lib 下:
      nano lib/smtp_tls.rb
      接著把他 require 進去:
      nano config/environment.rb
      ===========================
      require 'smtp_tls'
      ===========================

      sudo mongrel_rails cluster::restart
      註冊一下試試寄信吧!如果失敗的話,那篇連結裡有個 workaround:

      nano lib/smtp_tls.rb
      =====================
      rescue EOFError
        ;
      rescue OpenSSL::SSL::SSLError => e
        puts('Unexpected Exception: ' + e.message + ' : ' +
          e.backtrace.join("\n") )
      end
      =====================

      我之前用是沒有這個問題,但在這台 fedora 上卻有這個問題,
      也許是要更新 openssl 的版本?不管如何,加入上面那段暫時可用。

      結論:
      還是 macports 好用,速度快,更新快,只是 build 要很久就是了。

      2/25/2007

      Mongrel 在 Locomotive 最新版上面的問題

      這篇是 lukhnos 的 在 PowerPC Mac 上拉火車頭要注意的繁體中文翻譯(XD)希望沒有翻譯失真@@!

      Ruby on Rails 開發者都很喜歡 Locomotive 這個套件。不過最近一版的Locomotive (Jan 2007 bundle),卻驚傳裡面附帶的 Mongrel在 PowerPC Mac 上不會 work 了,無論按多少次 CMD-R ,就是不會 Listen 指定的 port 。奇怪的是 Intel Mac 無此現象。

      這問題剛出現時,一度傳出的解決方法是…… 「請 PowerPC 使用者改用 lighttpd」…… -_- 後來終於有人發現,原來是 Mongrel 的 gem package 爛掉了,請隨便在 Locomotive 上面的列表,按 CMD-T 進 Terminal 後,下達以下指令:
      gem update mongrel
      然後重新啟動 Locomotive,Mongrel 就會在 PowerPC 上回神了。

      唔,雖然嚴格說來,Lighttpd的速度比較快說……

      據作者說,應該不久後就會有新的 bundle 了。


      1/26/2007

      [ 翻譯 ] Zed on Ruby, Rails, Mongrel, and More

      去年三月 O'Reilly 訪問了 Mongrel 作者 Zed Shaw,想翻譯這篇的原因是因為 Javaeye 上面 alang 發表了簡體翻譯,本來想說直接翻成繁體就好了,不過發現到有些部份原翻譯者並沒有翻譯,順便多翻譯了一下,也幫忙潤飾一下文字成為台灣使用者比較習慣的文法。雖然有不少部份修改,但是本翻譯 50% 以上內容還是改自 alang 的簡體翻譯,並且訪談內容版權屬於 O'Reilly 所有,在此感謝,如有爭議請來信告知。裡面如果有那幾句忘了翻譯,也請指正。


      感想:

      在 去年三月時,Mongrel 作者 Zed Shaw 提出他想利用 Mongrel 補齊 Rails 在 Enterprise 那一塊的缺口,到現在 Mongrel 發表 1.0 版的同時,Reverse Proxy + Mongrel Cluster 已經是使用 Ruby on Rails 公司的基本配備,看起來 Zed 似乎已經完成當初的夢想了,恭喜 Zed ,Ruby on Rails 也因為有了他,成長才能夠如此迅速。

      摘要:

      Zed Shaw 在一開始指出有了 Mongrel 的 Ruby on Rails ,已經是一個 Enterprise Ready 的 Framework,並且他已經被許多使用者拿去 Run Real Business。他並且提出一些小故事,間接驗證 Mongrel 的安全性是很良好的。(Apache 擋不住的攻擊,但是被 Mongrel 擊退了)

      他在文中也提出許多 Ruby and Rails 社群應該反省的事情
      1. Ruby 執行效能不應該被輕視,雖然我也是輕視的那一群
      2. Win 32 社群不該被輕視
      3. Ruby on Rails 已經有點擁種,該是輕量化的時候了
      4. Active Record 應該增加一些 Connection Pool 設計
      並且他也開始著手構思繼續建制一個良好的 Cache Proxy。

      本文開始

      Zed Shaw 是一個在Ruby世界中漸漸聲名大噪的程式設計師,它是Mongrel的作者,因快速、穩定、安全而出名。在這個訪問中,他討論了Mongrel,Ruby,和他的創建良好程式碼的經驗。

      問:你是怎麼進入Ruby世界中的?

      答:多年前,我在開發一個怪異的控制工具--我叫它FastCST時--接觸到Ruby時。我試了一下Ruby,但是不得要領,馬上就回到了C語言了。當我讀了Curt Hibbs的文章時,才瞭解到,「Hey,他們在用這個東西在做DSL (domain specific languages )。」從那時起,我就開始開發一個Ruby版本的FastCST,但是很快就被其他的Ruby on Rails 的有趣 Project 所分心。

      問: 當某人說他使用 Ruby 時,通常大家就直接連結到他在使用 Ruby on Rails. 你在 Ruby 上面的時間,以及 Ruby on Rails 的時間比是多少?

      答:我必須說我在 Ruby 上面主要的工作,也就是 Mongrel ,就是為了支援 Ruby on Rails,以及其他使用 Mongrel 的 Project。但是我每天的工作就是使用 Ruby on Rails。

      我喜歡 Ruby 的原因是因為你可以簡潔的表示你想要表示的東西,但是在可讀性上卻相當的清楚。當然有些不好的地方,但是 Ruby 以不可思議的速度加快了我開發的速度。這個語言不可思議的結合了 DSL 跟 OO 語言,並且讓我的開發程式,以開發程式雛型的速度,但是卻有產品的品質。


      問:許多人都在說,Ruby和Rails對於「企業級應用」還沒準備好,你怎麼看這個問題?

      答:在回答這個問題之前,我必須要明確人們所謂“企業級應用”的定義,可以概括為三點:
      1、龐大、昂貴
      2、可擴展性,性能,滿足我的服務需求
      3、有保障的商業技術支持,用來保護潛在的損失。

      問:OK,讓我們一點一點的來談,Ruby和Rails都是免費的,它們怎麼得到花費昂貴的人們的認可?

      答:「企業級應用」意味著你要花費上百萬的金錢在硬體和軟體上,但是這個觀點是錯誤的。這麼多年來,他們一直在灌輸這個觀點,是因為他們要從中獲取你購買他們產品的利益。實際上你的解決方案要符合你的真實需求。如果你需要一個龐大的解決方案,是因為你並沒有真正瞭解你到底需要甚麼。Rails 顯示了這樣的「企業級應用」是個錯誤的想法,這些事情其實並不需要,而且 ROI (投資報酬率)也會很差。

      Rails 正在做的事情就是證明你不用花一堆錢在「企業級應用」,依舊可以做大事情。Rails 可以做真正的 business。他已經讓一些企業家只花少許的基本投資,就可以實現他們腦中的想法,並且賺大錢。我知道紐約的一些小公司已經用很少的開發者,就可以建構起他們自己的站台。像這樣「減少開始創業的風險」足以證明 Rails 可以應付真正的 business。

      問:那麼,Rails的可以擴展性呢?

      答:那些企業級應用中的「擴展性」,我都可以用Mongrel來解決。首先,要把「可擴展性」與「高性能」要區別開來,同時要回到「資源的可以擴充性」上來。一旦你把「可擴展性」與「高性能」這二者區分開來,你就能兩者皆顧。

      Rails的擴展性(指的是滿足需求的可擴展性),和其它的Web應用框架一樣好。Mongerl讓這個工作變得非常簡單,它非常快,基於HTTP。如果你以前用過Tomcat,Resin,WebLogic或者Apache+PHP,那麼Mongrel運行Rails會達到同樣的效果。

      其實我是承認Ruby的效率不高的。Ruby的社區曾經有意的忽略了「高性能」重要的議題,他們必須正視這一點。現在已經有了一些成果,可以讓Ruby 變得快一些。但是還有許多問題要解決。有一個叫Rite的VM已經展示了一些成果(或是你可以講 YARV),對Ruby的加速已經可以和Java的解決方案相提並論了。

      Ruby的強項不在於它的運行速度,而是在於它的開發速度。我可以證明這一點,我在Mongrel上花了三個月的時間,它已經是一個全功能、穩定、高效的web server,可以用它來支撐許多Ruby網站。如果不用Ruby,這是不可能的。

      Rails的問題又不同於Ruby,因為Rails自己有著優秀的 cache 機制,這在一定程度上彌補了Ruby的龜速。Rails用「page caching」、「fragment caching」來加速應用。如果你善加良好的規畫你的 cache 方案,你可以得到和靜態頁面一樣的性能。甚至比Java或者PHP的做得還要好。

      問:那麼,商業化的技術服務呢?

      答:Rails現在還做得不夠好。我也了解很多組織在投資技術之前,他們會需要商業性的支援。但是,情況會越來越好。會有越來越的資金投入到這個Rails服務領域來的,他們會像PHP類似的眾多服務一樣做得很好的。如果你看看PHP,最開始只有Zend一家在做這個服務,後來有越來越多的大公司加入到服務的行列中來。

      問:在開始做Mongrel之前,你在開發SCGI,說一說它們之間的相似之處,談談他們如何 play together(or not)

      答:SCGI 是我的第一次取代FastCGI的嘗試。SCGI的目的是高效率的支撐純Ruby應用,目的已經達到了。但是,SCGI在很多web server中的支持是相當有限的,並且也不是那些web server 未來開發的選擇。Lighttpd的支源發來於對它的mod_fastcgi的修改,Apache的SCGI Module來自於Apache Project之外,並且Apache聲明過他們將對FastCGI的支援要多過對SCGI的支援。事實證明,許多人在Apache上使用SCGI與多個後台通信時都遇到了麻煩。SCGI看起來似乎不妙。

      Mongrel最開始是作為一個SCGI的proxy,試圖解決上面的問題。我寫了一個Http的解析器,然後用C寫了一個代理程序來回應請求,再轉發給SCGI。做到一半的時候,我意識到這個解析器寫的是如此的完美,讓我決定跳過中間轉發的部份,直接寫用Ruby寫一個web server。大約一天之後, Mongrel誕生了。

      我的對SCGI的計劃是,簡化它,只滿足最基本的要求。SCGI裡面目前有許多的DRb(分布式Ruby)管理代碼,還有一些其它人使用(濫用)的片斷, 但是,這對那些只是希望使用SCGI來工作的人來說沒有一點用處。為了支持那些目前使用SCGI的用戶,我將移植一些Mongrel的發明過去,比如 thread模型。要簡化SCGI,讓它回到最初的面目上去。

      說了這麼多,我想你已經明白了我未來的工作主要是Mongrel,我認為它是支持Ruby web應用的比較power的方法。HTTP 跟 SCGI 相比,在支援跟開發 Rails 來說,都是一個比較好的 Protocol。

      如果有任何人對接手SCGI的工作感興趣,我歡迎。或許那家公司可以在上面開發一個更好的產品。它在RubyForge上有個專案,有興趣和有能力的人來吧,我已經準備好了交出它的管理權。

      問:你在Mongrel上的工作是如何影響你在Rails上的工作的?或者相反?

      答:在Mongrel中,我必須用到的Rails代碼非常的少,這是為了讓Mongrel與Rails保持比較分離的結合,這樣當Rails在某個release版中改了甚麼東西並且讓程序崩潰時,Mongrel不受影響。

      當我在用Rails上開發時,我積極的使用Mongrel,並且記下哪些方面要作改進。這讓我可以保證Mongrel的實用價值,而不是為了純粹的學術目的作的憑空想像。

      舉個例子,我在windows平台上做開發,那簡直是不可思義的痛苦,主要的原因不在於windows本身,而是開發Rails的人從來沒有深入的使用過windows。Luis Lavena做的許多改進讓事情變得好了些。對於我這樣的、還有其它許多貧窮的使用windows的粗人來說,我要讓Ruby on Rails更容易使用些。

      問:我知道你在為Rails和Nitro camps上能運行Mongrel而努力。目前最大的障礙是甚麼?

      答:最好的事情是讓Mongrel變成「跟框架保持分離」的。我是唯一的一個能Rails與Mongrel合作的人。Rails核心開發團隊的一些傢伙主要是在開發時測試Mongrel,但是我自己,Luis Lavena,其他的幾個人,幾乎做了讓Mongrel產品化的全部工作。我和Luis是唯一被期待用Rails來做產品的人。

      Nitro,camping,還有IOWA團隊的人,為我做了許多讓mongrel適應他們平台上的工作。他們下載Mongrel,閱讀文檔,初期會打擾我,但是大部分時候不要我插手。 我覺得我幫助Campng項目最多,但實際上管理Mongrel的代碼要歸功於Camping。它回饋給我的是放在了0.3.12.5發行版中一個大檔案的上傳/下載 Patch,。因為他說他是在給ParkPlace做DVD的上傳/下載時碰到了。


      問:Mongrel給那些使用它的項目們回報甚麼了呢?

      答:我認為有兩件最大的回報,一是安全性增強,二是win32平台的支持。

      Mongrel的設計考慮了大多數HTTP服務器碰到過的安全問題,這些問題來自於過於鬆散的HTTP協議手工代碼處理。Mongrel使用了一個生成處理器(使用了Ragel),它非常穩固、優秀,可以阻擋大量的網路攻擊。因為這個保護是來自於HTTP協議層的,所以使用Mongrel的任何框架都可以自由的使用它。

      在EastMedia/VeriSign計畫中,我們遇到了一波來自某「安全公司」的網絡攻擊。在這裡我不想指出這家公司的名字,以免給他們做了免費的廣告。他們在沒有事先通知我們的情況下,對還沒有發布的機器,使用了一些掃描軟件。

      好在Mongrel在HTTP層就阻擋了所有的攻擊,沒有費一點事就把他們踢了出去。但是就在同時,Apache卻讓這次攻擊通過了 Proxy,一點報警都沒有。

      當他們進行了自動掃描之後,我們知道了有一些在「安全公司」的「手寫代碼」攻擊的人,被Mongrel所做的深深吸引住了。

      最有趣的部分是,Mongrel所做的全部,是使用了一個基於文法和解析生成器(Ragel)的正確的解析器。其它web server使用人工編寫的HTTP解析器,被證明是易受攻擊的、難於與真正的HTTP1.1 RFC規範相比較,維護起來也是非常痛苦的。使用了Ragel之後讓Mongrel非常的穩固,不需要創建特殊的攻擊探測邏輯,也能阻擋這些攻擊。

      其它項目從Mongrel身上得到的第二個好處,是Luis Lavena所提供的Win32支持。從Mongrel在Win32平台上成功之後,我看到了一些說Luis讓其它項目獲得了Win32平台兼容性的好消 息。有謠言甚至說Luis和它的朋友們為Win32用戶打開了Ruby世界的整個大門。我希望對Daniel Berger的win32utils項目也有同樣的幫助。

      問:在Mongrel背後的一個巨大力量是它速度快、幾乎是純Ruby代碼。你作了哪些優化工作?你使用了甚麼工具?

      答:我在優化C程式碼時,使用的主要工具是valgrind和kcachegrind。這兩個都是非常奇妙的免費工具。但是 Ruby在valgrind下運行得並不好。事實上,valgrind光是hello world就吐出了3萬個error。後來我轉而使用kcachegrind。

      效能檢測工具我使用httperf。當我在做了一個期待著能有性能提昇的改動後,但並沒有改觀時,我就用它重新檢測一下,再做一些其它可能有用的努力。

      整個過程都用了比較科學的方法。因為我從Ruby得到的有關性能的消息非常少,我只有不斷的測試、評估、調整,不斷的重復這個過程,直到確認性能指數真的提高了。使用統計學測試真正有用的地方在於,確認每一次的變動的確有了一些不同,或者至少確保沒有帶來壞處。

      我當然也使用Ruby的Profilling Library,但我只是在僅有Mongrel運行的地方作非常有限的測試。當Mongrel和其它的應用框架一起運行時,這些框架有可能拖慢了Mongrel的速度,用Ruby的Profilling Library就得不到任何有用的資訊。

      舉一個例子,在一個簡單的測試中,我用YAML來回應HTTP請求,我不能使用Ruby的Profilling Library,因為所有的性能訊息都是有關YAML的。Mongrel的訊息只有一丁點兒。Rails或者Camping的性能測試也同樣的情況,Profilling 吐出來有關於框架自身的性能數據多過有關於Mongrel的。

      當我對性能非常敏感的時候,我使用R工具來作有計劃的性能數據分析。


      問:最近,你做了許多工作比如單元測試,好讓Mongrel穩定、安全。你能解釋一下你的方法論,和你使用的工具?

      答:我非常贊同OpenBSD團隊所宣稱的,安全漏洞來自於一般的缺陷,而不是來自於你在源代碼裡面找到的那些特定的「安全漏洞」。這意味著我認為我修正了我所能找到的所有安全漏洞,並且積極的對待那些潛在錯誤之後,我會在這個過程中阻止許多漏洞。

      在我的所有項目中,我拼命的做到以下幾點:

      1、保證程式碼盡可能的簡單。
      2、在發布我的代碼之前,做Code review,持續的發現
      a、“丟失的斷言”-對於輸入輸出的不正確的假設
      b、“丟失的else”-沒有覆蓋到所有的邏輯分支
      c、“期待它會中止”-死循環或者短命循環錯誤
      d、“檢查返回值”
      e、“預料之外的異常”
      f、“簡單、可讀”-用可讀性強的代碼替換奇技淫巧的代碼;對複雜的代碼寫好文檔以便其它人可以理解
      3、盡可能的做單元測試
      4、外部的破壞性測試和性能測試。用不正確的輸入讓你的系統崩潰,高負荷,停止中間流的干擾,隨機的拆開資源。總之想盡一切辦法搞爛你的系統。
      5、用戶可用性評價。我認為如果一個系統是易於使用的,安全性問題就會少一些。但是我現在沒有實例來證明我的聲明。

      最終的結果,Mongrel可以在HTTP協議層阻擋海量的攻擊。這也許不能說明Mongrel是固若金湯的,但是Mongrel正在朝這條路上走。

      問:Mongrel要達到的下一個目標是甚麼?

      答:最近的一個工作是改進Mongrel的安裝部屬文件。日前為止還只有一個配置Lighttpd,但次我們真正需要的是在各種平台上部屬Mongrel叢集的文件。一旦這些文件完成了,佈置Mongrel會更容易。特別是那些已經使用了其它應用服務器比如Tomcat的人們。

      問:你是如何對待那些Mongrel的反饋和建議的?

      答:這些反饋都是非常積極的。最關心的問題,也是最值得考慮的問題。

      許多人都問到了布署問題,我將用良好的文檔來解決。其它人問到了叢級的管理,我希望Bradley Taylor(來自RailsMachine.com)將要提交的叢集插件能解決這個問題。其它一些人問到了licenses,我會在FAQs中說明。

      有一些頑固的問題,是關於如何處理caching和多個複雜動態web網站時的負載均衡。對於這兩個問題我目前無能為力,我會想些好點子,我希望我的下一個項目能解決「緩存問題」。

      問:Mongrel有甚麼障礙嗎?

      答:我得說,Mongrel的最大障礙,是讓它被人們接受成為一個 production 的平台。開發Mongrel 已經變成非常美好的事情了。我每天都從社區中收到許多來信,說一他們認為Mongrel是多麼的多麼的棒。但就是沒有一點關於使用Mongerl作巨型productiong布署的消息。我覺得在未來的幾個月裡,情況會好起來的。

      問:你最喜歡的5個 library 或者框架是甚麼(標準庫中的或者社區的都行)?

      答:我要說說Camping框架。它有著太多的魔力,讓我不得提到它。Mongrel從它身上得到許多代碼和思想。

      我使用webgen來管理Mongrel的網站。它可以非常容易的從一組簡單的wiki格式的頁面中生成靜態網站。

      我也很喜歡 Simple 這個用 Java 寫成的又小又快速的 Web Server。當我開始開發 Mongrel 時,我從 Simple 得到很多,並且採用 Simple 的 Handler 實做方式。Simple 有很多有趣的特色,像是他會去解析並且校正 response,但是儘管如此,他還是相當的輕巧跟快速。如果我要拿 Rails 來跟 Java 比較,Simple 應該是處於兩者中間的。

      網路性能測試工具,我只選httperf。它是唯一的一個能夠精確的統計分析,打斷整個的request/response鏈,精確的報告socket錯誤,每一個分析項都有精確的定義,容易使用的分析工具。

      我也非常的喜歡Lua語言,我把它當成Ruby的一個輕量級的替代者。它非常快,簡潔,非常容易的就能embed到其它程式中去。有著和Ruby相似的、並不陌生的語法。

      問:Ruby,Rails,Mongrel和Zed,它們各自的下一步計劃是甚麼?

      答:關於Ruby的這得去問Matz,Rails的要去問David。我能說的是,我希望Ruby和Rails將會是甚麼樣子。

      關於Ruby,我希望看到兩個結果。第一個是它能簡單的運行在valgrind下。讓它穩定、保持簡潔還要走很長的路。第二點是集中那些致力提高Ruby效率的人們的分散力量,到Ruby1.9的VM項目上來。

      對於Rails,我希望它能少些臃腫,並且我希望ActiveRecord能有一個比較像樣的的connection pool系統。對於「臃腫」這件事情,我相信DHH已經計劃著把一些東西(類似Active Web Service)移出 core 到 plugins中去。對於ActiveRecord,需要作一些重構,讓資料庫 connection pool看上去和Hibernate的一樣。這對那些按資料庫連接數付license費使用的商業資料庫使用者來說尤為重要。

      Mongrel的未來看起非常光明。我將在發布第一個production版本時。像Java將每個做的很好的產品都加入一個「Enterprise Editions」的名字一樣,我會取個「Mongrel 0.4 Enterprise Edition 1.2」的名字。我也會幫助更多公司佈署 Mongrel Server,或是將 Mongrel 加入他們的新產品中。

      我的下一個目標,可能是一個caching proxy服務器,目的是讓所有的動態web 程式性能更好、更快。當我在開發 Mongrel 時,我發現到 HTTP 1.1 整體的 cacheing 非常的老舊。我想我已經有一些改進的想法,並且希望能夠給很多 web application 更快的效率進步。

      ----

      Zed A. Shaw 是一個專業的軟體開發者。他已經開發 13年程式了,並且參與的產業範圍從政府,學校,商業產品。產品的範圍包括安全,網路,網頁程式設計。他也涉獵了系統管理,產品開發,可用性研發,顧客服務。他的閒暇時間也喜歡寫自己的自傳,大家認為他實在是一個很 cool 的人。


      延伸閱讀

      1/23/2007

      Mongrel 1.0 Release

      在大家引頸期盼下,Mongrel 終於 Release 1.0 版了,恭喜 Mongrel 正式邁向象徵 Stable 的1.0 ,往邁向商業 Production 使用的環境前進。到目前為止,Mongrel 依舊是 Ruby on Rails 裡面最穩定的 Application Server 選擇,並且在設定方面也相當的簡便。


      安裝方式
      gem i mongrel -y

      至於眼尖的使用者可能發現 Mongrel 是 1.0.1 的版本的,難道他跟 Rails 1.2 一樣,Release之後馬上出問題嗎?

      No!!!根據 Zed Shaw 的冷笑話

      What happened to 1.0?

      We decided to follow official Rails Configuration Management Board Standards and do a silent 1.0 followed by an official 1.0.1. There weren’t any bugs in 1.0 but we didn’t want to break with tradition by not offering a 1.0.1. (Yes, this is a joke.)

      So,看的懂的人就看的懂,看不懂的人就恭喜 Mongrel Team 好了XD

      1/05/2007

      [整理] Windows 上面跑 Apache 2.2 + Mongrel

      Windows 上面 Ruby 效能不佳,所以我曾經建議不使用 Windows 作為 Service 環境。但是如果你真的要用 Windows 作為 Server ,你可以看這一篇。

      不過請注意,我在之前就講過,我沒有 Windows 可以測試,只能整理別人的文章。尤其參考最多的是 Robbin 寫的 在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails,雖然沒有照著翻譯,但是你依舊可以視這篇文章為 Robbin 本文的繁體中文整理翻譯版,榮耀是歸於 Robbin 的。

      安裝 Ruby on Rails and Mongrel
      下載Windows版的Ruby來安裝,安裝時請記得裝 RubyGems。再來請用 gem 安裝下列三個套件
      gem i rails mongrel mongrel_service –y
      啟動 mongrel_service
      mongrel_service 就是 Windows 上面 Win32 Service 的 plugin。我們要先將 Mongrel 登記為其中一個 Windows Service。
      mongrel_rails service::install -N service_name -c c:\rails\service -p 3000 –e production
      • -N :win32 service 名字
      • -c:Rails 程式 root 目錄
      • -p:聽的 port
      • -e:Rails 環境
      仔細去看Win32 的service list,你會發現出現了一個你剛剛登記的 service_name。啟動的話就是
      mongrel_rails service::start -N service_name
      停止就是
      mongrel_rails service::stop -N service_name
      取消 service 登記就是
      mongrel_rails service::remove -N service_name
      如果你想 Windows 啟動,自動啟動 Mongrel Service,請按下
      sc config service_name start= auto
      如果你想說順便一起啟動 Mongrel Service 跟 MySQL,請按下
      sc config service_name start= auto dependency= MySql

      Mongrel_cluster ?
      大家一定很懷念 Mongrel Cluster 這樣的神兵利器吧,很可惜,Windows 上面沒有 Mongrel Cluster,所以大家要啟動 3000 ~ 3009 就得這樣搞
      mongrel_rails service::install -N service_name1 -p 3000 –e production
      mongrel_rails service::install -N service_name2 -p 3001 –e production
      mongrel_rails service::install -N service_name3 -p 3002 –e production
      ...
      mongrel_rails service::install -N service_name4 -p 3009 –e production
      笨嗎?蠢嗎?所以才跟你說 Ruby on Rails 不適合用 Windows 咩。
      安裝 Apache 2.2
      去 Apache 網站下載 Apache 2.2 Windows 版本。然後在httpd.conf enable module
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      使用 config file 就如同我這個網頁寫的方式,或是直接看 Robbin 寫的也可以。


      延伸閱讀


      12/26/2006

      Mongrel 1.0 快要來了


      Mongrel 1.0 RC1 Windows 版本已經在 Mongrel 首頁上面發佈了,很明顯的,Mongrel 1.0 的腳步也近了。

      其實我早就發現 Mongrel 的品質根本就是 1.0 的水準,並且許多站台早就在已經將 Mongrel 用在商業用途上面(Apache 2.2 + Mongrel)。只是Mongrel 0.3 的版本號碼實在很難看,也會嚇跑許多初學者吧,所以在 1.0 的推出應該對很多有人大大的振奮吧。


      在我研發期當中,我沒有安裝任何 Server 端的程式,只安裝 Mongrel 在 iBook G4 上面。從頭到尾,一個 Mongrel 就可以 handle 所有的研發任務。以後 Project 要上線,其實也只是多開幾個 Mongrel 去跑,前端交給 Reverse Proxy 去搞 load balancing即可。對一個 RD 來說,研發機器環境跟 Production 環境幾乎一模一樣,可說省了許多麻煩事。所以 Mongrel 可說是居家旅遊的必備法寶呀。

      12/14/2006

      Apache 2.2 + Mongrel 設定方式

      本來沒有打算寫的,不過看到 RailsCN 似乎有人有問題,所以還是順便寫一下好了。架設一些觀念在此我有作介紹,可以參考一下。


      設定 Mongrel Cluster

      請將你的 Mongrel Cluster 設定好,這裡預設 port 從 4000 ~ 4009 ,一共十個,跑在 production 環境下
      mongrel_rails cluster::configure -e production -p 4000 -N 10
      mongrel_rails cluster::start
      修改 Apache 2.2 設定檔

      Apache 的設定檔放在 httpd.conf ,以下修改內容皆在 httpd.conf 裡面設定。

      首先確定你的 Apach 2.2 有 enable apache 的其中一個 Module mod_proxy
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      再來我們開始設定 Mongrel Cluster 的 reverse proxy 設定,首先我們給這組 cluster 取名叫做 examplecluster,他是10組 Mongrel ,跑在 port 4000 ~ 4009 之中
      <proxy balancer://examplecluster>
      # cluster member 1
      BalancerMember http://127.0.0.1:4000
      BalancerMember http://127.0.0.1:4001
      ....
      BalancerMember http://127.0.0.1:4009
      </proxy>
      再來假設你的 hostname 為 example.com,我們開始設定 virtual host
      <virtualhost example.com:80>
      ServerName example.com
      ServerAdmin root@example.com
      DocumentRoot "/var/www/example.com/htdocs"
      ProxyPass /images !
      ProxyPass /stylesheets !
      ProxyPass /javascripts !
      ProxyPass / balancer://examplecluster/
      ProxyPassReverse / balancer://examplecluster/
      </virtualhost>

      重點是在於 ProxyPass,ProxyPass 代表 images,stylesheets,javascript 等 static file 交給 Apache 處理,不要給 Mongrel 處理。 還有 ProxyPassReverse 要指定正確的 cluster name ,我們要指定為 examplecluster。

      最後重起 Apache 即可。本設定改自著名的文章 Scaling Rails with Apache 2.2, mod_proxy_balancer and Mongrel,還有 Robin 的 在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails。設定是在 Gentoo Linux + Apache 2.2.3 + Mongrel 跑完全沒有任何問題。

      12/07/2006

      Mongrel 真的夠穩

      在跑 Ruby on Rails 服務中,Lighttpd + Fastcgi 是 performance 很好的選擇,但是他有一個缺點,他很難管理,有時候會出現怪怪的情況。根據這個網頁的說法
      The net effect is that my FastCGI dispatchers become unresponsive after a while, potentially after a huge traffic spike. Those sit there doing nothing and lighttpd is unable to talk to them.
      當他在 high traffic 的情況下,似乎有時候會出現不太穩定的情況。雖然其實 Fastcgi 也沒那麼不堪,JavaEye 就是 run Lighty + Fastcgi ,也沒聽他們在說這樣組合不穩,Hemidemi 根據側面瞭解似乎也是跑 lighty + fastcgi,也還不是很穩定。但是如果你真的跑一個流量大到嚇死人的網站,或是你天性就是要求99.99%的穩定上線時間,有沒有更好的選擇?

      這時候我們來看看另外一個跑 Ruby on Rails 常見的組合,Apache 2.2 + Mongrel。Apache 雖然效率不及 Lighty ,但是穩定度可是他的強項。而 Mongrel 呢?他夠穩嗎?

      長時間觀察

      我已經使用 Mongrel 跑在我公司一些流量較小的服務上面,至今已經快三個月了。除了我修改程式必須重新啟動 Mongrel 以外,他依舊每天任勞任怨的穩定服務。


      尖峰時刻的穩定度

      上面說的流量小服務當中,我曾經遇到一個小小的 DOS 攻擊,有個人曾經在極短時間內用 bot 塞了一萬八千多筆資料到資料庫裡面(汗,是我寫的程式有一個地方沒檢查到),Mongrel 依舊沒有任何不穩的跡象。我使用 ab 來做壓力測試時(concurrency 100), Mongrel 也沒有鬧情緒。

      小結論

      Mongrel 在安裝方便,管理簡單,scability 方便,以及穩定度上面表現的都相當的優異。我認為這是 Ruby on Rails 裡面,Application Server 目前最佳的選擇。

      11/05/2006

      Comet For Ruby on Rails and Mongrel

      Comet 這個詞出自於 Dojo 作者 Alex Russell 在 2006/3/3 發表的 Comet: Low Latency Data for the Browser 。簡單來說就是讓 Browser 跟 Server 作一個長時間不斷線的連線,然後我們要在 Web 撰寫 Rich Client 的程式就相當的容易。有人推測這可能是一個超越 AJAX 的技術。

      Comet 跟一般常用的 AJAX Polling 作法有相當的不同。Polling 簡單來說就是每過一段時間,去問 Server 有沒有變化,這個作法的好處是不更改現行的 Web Server 架構即可做到,缺點是會造成 Server 跟頻寬相當大的負擔。下面有一份 Alex 畫的 AJAX 與 Comet 之間流程比較圖



      至於 Comet 的目的是讓 Client Server 保持連線,Server 狀態一有改變,就傳一份給 Client。作法有 HTTP_Streaming、Server Push,HTTP Streaming 我還沒有 survey ,不過 Server Push 技術我發現 vgod 的文章講的很好,也很清楚
      這個方法一開始還是由client先對server建立連線,但是server在建立起連線後,送出的header中要把content-type設為” multipart/x-mixed-replace”,意思是server之後要分好幾次送出許多片段資料,請client保持連線不要中斷,並且把每 次拿到的新片段取代之前的舊片段。接著,client就只要在這條保持不斷的HTTP連線上等著收server送過來的資料就好了。
      Comet 的好處是不用像 Polling 一樣耗費太多不必要的頻寬,壞處是 Web Server 架構要修改程式成 Comet 的運作方式,在Browser 部份也有問題要修改,因為 IE 不下載完成就不顯示網頁,必須使用 iframe 或是 Flash 來幫忙做到抓取即時資料的任務。在目前來說,因為缺乏 Server 大環境的支援,短期內大流行的機率不高。目前已經有 Lightstreamer 的即時財經訊息,感覺很不錯。(下圖為 lightstreamer 裡面的即時股市資訊)
      這是目前使用 Comet 技術的公司已經有
      介紹完 Comet 了之後,你認為這還只是構想而已嗎?我發現到 Ruby on Rails 社群對於 Comet 是相當接受,現在已經有 Comet 的 Plugin : Juggernaut 。這個 Plugin 附帶了一個用 Ruby 寫的 Push Web Server,在 Browser 端使用 Flash 6 來接收 Server Push 過來的資料,可以說是實做相當的完整。這裡也有一份簡介。另外也有人寫了一份擁有 Comet 功能的 Mongrel 。看到這邊,已經很興奮了。我們可以使用 Juggernaut 的 Flash 6 Client ,然後 Server 端使用 Reverse Proxy 轉到 Mongrel Cluster當作 Web Server ,這樣環境架設問題似乎都解決了。



      仔細看看這種作法, Reverse Proxy + Mongrel Cluster 幾乎也是 Ruby on Rails 社群的標準作法,不論速度或是穩定度都表現都相當不錯。而且這種搭配方式可以用最少的伺服器轉換成本(不用改寫 Apache 或 Lighttpd),而達成 Comet 的目標。也就是說,Comet On Rails 已經不是只聞樓梯響的階段了,只要 Comet Mongrel 進入 Stable 階段,隨時可以給企業使用。

      參考閱讀
      1. Comet: Low Latency Data for the Browser
      2. Comet : 超越 Ajax 的新技術?
      3. Juggernaut: Comet for Rails?

      10/30/2006

      Mongrel 新的安全漏洞

      問題
      根據這篇Mongrel Denial of Service vulnerability
      There is a denial of service vulnerability for Ruby applications that either use cgi.rb, or run on Mongrel or Litespeed.
      也就是說,所有使用 cgi.rb,Mongrel ,LiteSpeed 都會糟 DOS 攻擊(最近DOS這個東西很敏感XD),最慘的情況會遭致 Ruby 消耗 99% CPU 的無窮迴圈。

      解法
      gem install mongrel --source=http://mongrel.rubyforge.org/releases


      參考連結:
      1. Mongrel Denial of Service vulnerability
      2. 新的安全漏洞,mongrel DOS

      10/05/2006

      lighttpd mod_proxy_core + Mongrel Cluster

      經過上一篇的 Mongrel Cluster ,我們可以發現到我們已經可以配置 Mongrel Cluster,再來的問題就是如何使用他?有鑑於之前寫過的 Lighttpd mod_proxy_core 的歷史,我們使用 Lighttpd mod_proxy_core 來使用 Mongrel Cluster。

      首先,先配置 Mongrel Cluster 在本機端
      mongrel_rails cluster::configure \
      -e production \
      -p 8000 \
      -N 3 \
      -c /var/www/servers/ \
      -a 127.0.0.1 \
      --user mongrel \
      --group mongrel
      • -e :代表啟動那個環境,這裡是 production 環境
      • -p :代表開始從那個 port 開始 listen,這裡是 8000
      • -N :代表一次 cluster 啟動幾個 Mongrel,這裡是三個
      • -c :代表 Mongrel 啟動那個目錄
      • -a :代表 listen 在那個 ip
      • --user :代表以那個 user 啟動 Mongrel
      • --group :代表以那個 group 開始啟動
      我們啟動了三個 Mongrel Cluster,並且 Listen 8000 , 8001 , 8002 port。然後下載這份 Lighttpd trunk (預計會在 1.5 放入 Lighttpd )
      ./configure &&amp;amp; make && make install

      再來,將 lighttpd.conf 加入
      server.modules = ( ..... , "mod_proxy_core" , ....)
      並將在 lightppd.conf 寫入下列的設定
      $HTTP["host"] == "domain.example.com" {
      proxy-core.balancer = "round-robin"
      proxy-core.protocol = "http"
      proxy-core.backends = ( "127.0.0.1:8000", "127.0.0.1:8001" , "127.0.0.1:8002")
      }
      proxy-core.balancer 代表的意思是如何去分配的 ,一共有 hash, fair, rr 三個 balancer。剩下的都很好看懂吧。

      最後重起 lighttpd 即可,這裡的 mod_proxy_core 主要是作 reverse_proxy 的工作

      參考連結
      1. Rails, Mongrel, Lighty and Mint
      2. PRE-RELEASE: lighttpd-1.5.0-r1454.tar.gz
      3. mod-proxy-core and SQF
      4. Lighttpd 1.5 + Linux Async IO

      Mongrel 使用方式 Part 2 : Mongrel Cluster

      看完上一篇,大家一定很想丟雞蛋
      這樣的 tutorial 也可以出來混一篇文章
      在大家浪費買蛋錢之前,我必須要說,好戲在後頭呀!!!
      Mongrel 如果只有單獨啟動在 80 port
      他充其量不過是一個速度較普普的 Web Server
      但是,當作 Backend Application Server 才是他的宿命呀

      今天的需求是這樣
      我們可以開啟數個 Mongrel Process 在其他 port
      前端開一個 Proxy Server
      當 Proxy Server 接受到 request
      他會傳給 backend application server
      其實作法很像 Mod_fastcgi 的作法
      只是中間的 application server 將 fastcgi 改成了 mongrel

      如果要開啟眾多的 Mongrel Process
      我們當然可以用
      mongrel_rails start -d -p 8000 -P log/mongrel_1.pid
      mongrel_rails start -d -p 8001 -P log/mongrel_2.pid
      ....
      這樣來執行,但是要管理就變得相當的麻煩
      不但要一一起動,要關掉或是重起的變得相當麻煩
      如果 Mongrel 那麼麻煩的話
      那我們還搞屁,直接用 fastcgi 就好啦 XD
      這時候請用 mongrel cluster
      有了他,Mongrel 才變成簡單好用的 Application Server

      安裝方式
      gem i mongrel_cluster
      即可

      設定方式
      一開始,請到 Ruby on Rails 的根目錄
      先設定 Mongrel 的設定檔
      mongrel_rails cluster::configure -e 那些環境 \
      -p 8000 \
      -N 3 \
      -c /var/www/servers/ \
      -a 127.0.0.1 \
      --user mongrel \
      --group mongrel
      他會將 config 寫到 config/database.yml
      我解釋一下選項
      • -e 就是用那個環境啟動(production/development/test)
      • -p 就是用那個 port 開始
      • -N 就是開啟幾個 process
      • -c 就是先切到那個目錄,再執行 mongrel cluster (通常是這個Ruby on Rails 的根目錄)
      • -a 就是在那個 host 啟動
      • --user 就是以那個 user 身份啟動
      • --group 就是以那個 group 啟動

      如果設定好後,以後使用 mongrel_rails cluster::start 他就會立刻使用剛剛的設定檔
      這裡要注意的是 -N 跟 -p 的選項
      假設 -p = 8000 -N 為 3
      那他會開啟三個mongrel process ,分別以 8000 , 8001 , 8002 來聽
      其實 -p 8000 -N 3
      就跟
      mongrel_rails start -d -p 8000 -P log/mongrel_1.pid
      mongrel_rails start -d -p 8001 -P log/mongrel_2.pid
      mongrel_rails start -d -p 8002 -P log/mongrel_3.pid
      一樣的意義

      以此類推假設 -p = 7000 -N 為 5
      那他會開啟五個mongrel process ,分別以 7000 , 7001 , 7002 , 7003 , 7004 來聽

      使用方式
      啟動方式
      mongrel_rails cluster::start

      關閉方式
      mongrel_rails cluster::stop

      重起方式
      mongrel_rails cluster::restart

      參考連結
      1. Rails, Mongrel, Lighty and Mint

      Mongrel 使用方式

      Ruby on Rails 架設一直有一個問題
      找不到適當的 Application Server
      Webricks 太慢,fastcgi 太玄妙,scgi 太年輕
      這個時候
      只有 Mongrel 可以拯救世界呀~~~~

      Mongrel 首頁是這樣寫的

      Mongrel is a fast HTTP library and server for Ruby that is intended for hosting Ruby web applications of any kind using plain HTTP rather than FastCGI or SCGI. It is framework agnostic and already supports Ruby On Rails, Og+Nitro, and Camping frameworks.
      他跟Webricks 一樣,是一個方便我們架設 Ruby on Rails 環境的網頁伺服器
      並且他比 Webricks 還要來得快速

      安裝方式很簡單
      gem i mongrel
      使用方式呢,基本上跟 Webrick 差不多
      到 Rails 根目錄
      打入
      mongrel_rails start
      你就會發現他已經可以使用了

      如果要用 deamon 模式來使用的話
      打入
      mongrel_rails start -d
      即可

      如果要使用特定的 port
      mongrel_rails start -p 1234
      即可

      用不同環境啟動
      mongrel_rails start -e production/development/test
      即可

      指定log file
      mongrel_rails start -l log/mongrel_log
      即可

      有啟動的問題
      mongrel_rails start -h
      即可

      重起 Mongrel
      mongrel_rails restart

      停止 Mongrel
      mongrel_rails stop

      10/02/2006

      Lighttpd mod_proxy + Mongrel is Fixed

      除了 Fastcgi,Mongrel 是一個取代他的Application Server選擇。不過Mongrel的作者很早就在 argue
      I’m sad to say that I have to recommend people not use lighttpd anymore. The author hasn’t updated the mod_proxy plugin and isn’t providing too much support for the bugs it has.
      因為這樣,所以目前很多人回去使用 Apache 2.2 + mod_reverse_proxy。畢竟 Apache 穩定是出名的(太肥也是出了名)。熱血的 Lighttpd 作者 Jan 自從去了 Rails Conf,每個路人看到 Jane,都會跟他 argue
      Please fix mod_proxy
      為了平息民怨,他本來在 Rails Conf 上面說 Lighttpd 1.5 才要改的。不過他的程式功力似乎超出他的想像(笑)。So,在 7/16 他就修正了 mod_proxy ,另外,這是最新版的 Lighttpd 1.5 Pre-release ,目的就是要搶回 Rails 的市佔率 XD

      延伸閱讀
      1. 對岸的新聞報導
      2. Hash Balance 設定範例
      3. Rails Mongrel Mint and Lighty