我---7号斋主人

已婚
爱老婆
I wanna be a happy fish...

星期二, 十月 10, 2006

Apache+FastCGI+Rails(摘)

CSDN上的一篇关于配置rails在Apache+FastCGI得文章,看过很多篇,没有存档,也是因为自己按照文章上讲的没有配置成功,希望这篇有用,存之。
-----------------------------

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


AddHandler fastcgi-script .fcgi

#下面这句话很重要,设置超时时间,因为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占了


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选项

Options ExecCGI FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny

RewriteEngine on
RewriteLogLevel 0

保存之后重启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服务器了。

没有评论: