最完整的ruby,rails环境架设配置(Apache+fastcgi)

文章日期:12/31/2007 12:54 am
最完整的ruby,rails环境架设配置(Apache+fastcgi)
2007-12-14 10:42

在cloudzm的blog上看到这篇文章,照着做了一遍,发现有一两处遗漏,写出来以免自己忘记:
我用的是windows2003, server 用的是wamp server(apache 2.0 , php5, mysql5)
下面是原文,红字是我自己写的:

其实只是写出来,怕以后忘记,也没指望多少人会看到,网上也有许多关于设置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找不到这个模块,就看看是否安装正确了。

安装的时候不能装mysql.so,我不知道这个是做什么用的,这个文件是在ruby下面,可能是ruby的一个mod吧,但是我的情况是安装了这个之后mysql不能连。所以删掉这个文件了。
还有就是安装的时候出错一次,说是不能安装一个文件叫做ms…71.dll的,查了一下是c++的runtime文件,我的机器里面有更高的版本了所以就直接忽略掉。

5 配置Apache

Apache的安装就不说了,我的版本是2.0.48 。

打开httpd.conf文件,首先是加载一些模块:


wamp5的httpd.conf文件在c:\wamp\apache2\conf下面

  1. LoadModule rewrite_module modules/mod_rewrite.so #
  2. LoadModule fastcgi_module modules/mod_fastcgi.so
  3. 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占了


作者遗漏了一件事情就是要设置apache让他能够listen 8080端口,要不然还是不能用的。
在listen 80下面添上这一行:
Listen 127.0.0.1:8080

ServerName rails # 随便起的一个名字

#下面设置的是放置你的rails程序的位置,我是放在e:/learnruby目录下的

这里要加一句:
DocumentRoot e:/www/ruby/
我是把ruby的程序放在了这个目录下面的,要不然还是不能用的

#下面这句话的是alias所有的形如”/app/controller/action”的路径为实际路径e:/learnruby/app/public/controller/action

#rails应用程序app目录下面的public目录就是给http server用的,alias之后,Apache才能找到rails的dispatch.fcgi文件

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

#这里需要设置e:/learnruby目录具有ExecCGI FollowSymLinks选项

  1. Options ExecCGI FollowSymLinks
  2. AllowOverride all
  3. Allow from all
  4. Order allow,deny
  5. RewriteEngine on
  6. 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 #