天天看點

How to setup Apache+FastCGI+Rails on windows

其實隻是寫出來,怕以後忘記,也沒指望多少人會看到,網上也有許多關于設定apache和rails的文章,我試了幾個都有問題,最後參照網上的文章,自己摸索出這個方法來。如果能夠幫到某些人的話,我還是很高興的。

直接進入正題吧…

1 安裝Ruby

略…

Ruby的版本要是1.8.2的,Rails 0.13中用到了一些老版本Ruby中沒有的特性,是以最好還是用新一點的。我的機器上:C:/>ruby -v :  ruby 1.8.2 (2004-12-25) [i386-mswin32]

2 安裝rubygems

windows下的ruby installer自帶了rubygems,如果安裝時沒選,到此處下載下傳rubygems

http://rubyforge.org/projects/rubygems/

解壓後運作C:/>rubygems-0.8.10/ruby setup.rb,檢視是否安裝好,C:/>gem -v : 0.8.10

3 安裝Rails

C:/>gem install rails --include-dependencies

會安裝Rails以及其依賴的其它gem

因為是remote安裝,可能會比較慢,也可以先下到本地來安裝(http://gems.rubyforge.org/gems/)。指令執行完後,看看裝了哪些gem:

C:>gem list

actionmailer (1.0.1)

    Service layer for easy email delivery and testing.

actionpack (1.9.1)

    Web-flow and rendering framework putting the VC in MVC.

actionwebservice (0.8.1)

    Web service support for Action Pack.

activerecord (1.11.1)

    Implements the ActiveRecord pattern for ORM.

activesupport (1.1.1)

    Support and utility classes used by the Rails framework.

rails (0.13.1)

    Web-application framework with template engine, control-flow layer,

    and ORM.

rake (0.5.4)

    Ruby based make-like utility.

4 安裝FastCGI

到此處下載下傳RubyForApache

http://rubyforge.org/projects/rubyforapache

RubyForApache包含了mod_fastcgi和mod_ruby,我們隻需要用到mod_fastcgi。安裝時要選好Apache的目錄,installer會在標明的目錄/modules下面放入mod_fastcgi,是以如果後面Apache找不到這個子產品,就看看是否安裝正确了。

5 配置Apache

Apache的安裝就不說了,我的版本是 2.0.48 。

打開httpd.conf檔案,首先是加載一些子產品:

LoadModule rewrite_module modules/mod_rewrite.so     # <- 重要

LoadModule fastcgi_module modules/mod_fastcgi.so

<IfModule mod_fastcgi.c>

   AddHandler fastcgi-script .fcgi

</IfModule>

#下面這句話很重要,設定逾時時間,因為rails啟動時間比較長,如果太短了,容易逾時,導緻fastcgi反覆啟動ruby程序,根據你的機器配置來設

FastCgiConfig -restart-delay 120 -idle-timeout 150 -appConnTimeout 100 -init-start-delay 100 -startDelay 100

因為我還要用到PHP,是以做了一個Virtual Host

NameVirtualHost *:8080 #端口号根據你自己的改,我的80被IIS占了

<VirtualHost *:8080>

ServerName rails  # 随便起的一個名字

#下面設定的是放置你的rails程式的位置,我是放在e:/learnruby目錄下的

#下面這句話的是alias所有的形如"/app/controller/action"的路徑為實際路徑e:/learnruby/app/public/controller/action

#rails應用程式app目錄下面的public目錄就是給http server用的,alias之後,Apache才能找到rails的dispatch.fcgi檔案

AliasMatch ^/([^/]*)(.*) "e:/learnruby/$1/public$2"

#這裡需要設定e:/learnruby目錄具有ExecCGI FollowSymLinks選項

<Directory "e:/learnruby">

  Options ExecCGI FollowSymLinks

  AllowOverride all

  Allow from all

  Order allow,deny

</Directory>

RewriteEngine on 

RewriteLogLevel 0

</VirtualHost>

儲存之後重新開機Apache。

還要再編輯rails應用程式目錄下的public/.htaccess檔案,假設應用程式的名字為demo(可以用

E:/learnruby>rails demo指令在e:/learnruby下建立一個空的應用)

那麼要加入一句話:

RewriteBase /demo 

為了能使用fastcgi,還要将RewriteRule ^(.*)$ dispatch.cgi [QSA,L]注釋掉,并去掉RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]的注釋

最後看起來大概會是這樣:

RewriteEngine On

RewriteBase /demo   # <- 加入

RewriteRule ^$ index.html [QSA]

RewriteRule ^([^.]+)$ $1.html [QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]  # 修改

6 測試

為了能通路到rails虛拟主機,還要在C:/WINDOWS/system32/drivers/etc/hosts檔案中加入

127.0.0.1      rails

打開浏覽器,輸入你的應用的位址,如http://rails:8080/demo,應該就會出現

Congratulations, you've put Ruby on Rails!。

以後每建立一個rails應用時,隻要記得修改public/.htaccess檔案就可以了,不用重新開機Apache伺服器了。