2007年9月18日 星期二

Ruby CGI on Apache

前一陣子, 聽我老闆的建議, 開始試著去看一下Ruby這一個程式語言. 對於我這只會寫C, 沒有任何OO概念的人, 看到這樣一個純OO, 高階與的語言真的是令我眼花撩亂.
Ruby的書也看了一陣子, 也該開始用用看囉, 剛好最近在寫一個HTTP client, 需要一個Web server做測試.
所以就試著自己架一個Web server, Apache + Ruby (CGI).
如果讓Apache支援Ruby寫出來的CGI呢? 基本上需要安裝mod_ruby將Apache與Ruby結合在一起.

下面是在Ubuntu 7.04的安裝步驟.
1. 安裝Apache 2 (目前版本是2.2.3), Ruby (目前的版本是ruby 1.8.5) 和mod_ruby, 因為我們是安裝Apache2, 所以安裝libapache2-mod-ruby

apt-get install apache2
apt-get install ruby
apt-get install libapache2-mod-ruby


2. 設定Apache, 請編輯/etc/apache2/httpd.conf
安裝mod-ruby時已經加入的mod_ruby載入的設定, 所以不需額外設定.

/etc/apache2/mods-enable/ruby.load
/etc/apache2/mods-available/ruby.load


設定ruby CGI 目錄 (/var/www/ruby)和副檔名(*.rbx)

# ClearModuleList
# AddModule mod_ruby.c

<IfModule mod_ruby.c>
RubyRequire apache/ruby-run

# Execute files under /ruby as Ruby scripts
<Location /ruby>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Location>

# Execute *.rbx files as Ruby scripts
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
</IfModule>


3. 重新啟動Apaeche

sudo /etc/init.d/apache2 restart


4. 再來一個簡單的測試. 當然第一個CGI就是送出"Hello World" 到browser上面囉.

sudo mkdir /var/www/ruby
sudo vi hello.rbx


hello.rbx:

#!/usr/bin/ruby

require 'cgi'

# Create a cgi object, with HTML 4 generation methods.
cgi = CGI.new('html4')

# Ask the cgi object to send some text out to the browser.
cgi.out {
cgi.html {
cgi.body {
cgi.h1 { 'Hello World!' }
}
}
}


5. 一切都OK之後, 連到http://localhost/ruby/hello.rbx, 你就可以看到"Hello World!"

沒有留言: