Ruby On Rails on Windows with Apache

昨天花了整天的時間在安裝RoR的環境,除了Windows還想辦法在ubuntu上裝,我覺得RoR有一個問題是在上手困難,其一是安裝問題,安裝方法太多了,再來是他強項的MVC架構,和一般的伺服器語言的概念不同,兩者都是需要瞭解過後才能正確的生產程式吧,事實上我現在的RoR程度只在裝好server而已XD。這篇先介紹Windows上使用Mongrel service的安裝方法,其實網路上現在也一堆安裝教學,但是幾乎都是用virtual host的,沒有自己的domain name做起來蠻麻煩的,所以我一直想作成在不同子目錄下跑不同的RoR應用程式,昨天最後是找到這個方法。

首先到Rubyforge下載Windows版的Ruby回來安裝,安裝時記得要勾選RubyGems,安裝完成後開啟命令列(DOS視窗),輸入以下指令安裝需要的套件:

gem install rails
gem install win32-service
gem install mongrel
gem install mongrel_service

途中會問你要不要安裝其他需要的套件,都回答要,直接按下enter預設就是要安裝了,安裝mongrel時選擇最新的win32版。接下來隨便產生一個RoR app,假設產生的app名稱叫myapp,位置在C:\myapp下,那就是在C:\輸入以下指令:

rails myapp
cd myapp
ruby script/service

這時候連到 http://127.0.0.1:3000/ 看看,如果有看到東西就表示Rails server有跑起來,回到命令列那按Ctrl+C停止server,繼續輸入以下命令:

mongrel_rails service::install -N myapp -c c:\myapp -p 4000 -e production
mongrel_rails service::start -N myapp

第一行的目的在安裝service,其中的-p 4000代表開在port 4000的位置,如果之要要增加其他應用程式的話集得要改成其他數字,第二行則是開啟service,如果要關閉此服務則是輸入以下命令:

mongrel_rails service::stop -N myapp

做到這一步就把RoR端都搞定了,mongrel service就讓他保持開啟的狀態,接下來要修改Apache端的設定了,修改httpd.conf檔,首先要開啟proxy module,其實我不確定這裡開啟哪幾格,不過我最後是開了三個如下:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

然後在檔案最下面加上proxy pass的設定:

ProxyPass /myapp http://127.0.0.1:4000/
ProxyPassReverse /myapp http://127.0.0.1:4000/

表示連到/myapp這個位置的連線會被轉到http://127.0.0.1:4000/的位置,也就是mongrel service的位置,設定好後,重新啟動Apache然後連到http://127.0.0.1/myapp/看看,有看到RoR起始頁就是安裝成功了,如果想測試看看有沒有正確的運作,可以自己建立一個controller連線看看,這部份我就不詳述了:P。