vkill'blog

archlinux SBS--http server(1):How to install and run Ruby On Rails

10:36 , vkill
环境:
linux-2.6.25-ARCH
apache-2.2.9  fcgi-2.4.0  mod_fastcgi-2.4.6  mod_fcgid-2.2
ruby-1.8.7  Rails-2.0.2
目的:
使用 apache fastcgi/fcgid 构建 ROR 环境

实现步骤:


一、安装apache、fastcgi、ruby、rubygems 和 sqlite3

[root@myhost ~]# pacman -S apache fcgi ruby rubygems sqlite3


二、安装apache模块 mod_fastcgi 和 mod_fcgid ,并配置使apache支持
1、先安装mod_fastcgi

[root@myhost ~]# tar -zxf mod_fastcgi-2.4.6.tar.gz -C /usr/src/
[root@myhost ~]# cd /usr/src/mod_fastcgi-2.4.6/
[root@myhost mod_fastcgi-2.4.6]# cp Makefile.AP2 Makefile
[root@myhost mod_fastcgi-2.4.6]# vi Makefile
#修改top_dir参数,值为 apache 的安装路径
top_dir      = /usr/lib/httpd
[root@myhost mod_fastcgi-2.4.6]# make && make install

2、修改httpd配置文件,使支持 mod_fastcgi

[root@myhost ~]# vi /etc/httpd/conf/httpd.conf
#文件末追加下面这段
LoadModule fastcgi_module modules/mod_fastcgi.so
<IfModule mod_fastcgi.c>
    #AddHandler fastcgi-script .fcgi
    FastCgiIpcDir /var/lib/fastcgi_ipc/
</IfModule>

3、创建 fastcgi ipc 目录,并设置权限

[root@myhost ~]# mkdir /var/lib/fastcgi_ipc/
[root@myhost ~]# chown http:http /var/lib/fastcgi_ipc/
[root@myhost ~]# chmod 755 /var/lib/fastcgi_ipc/

4、再安装mod_fcgid

[root@myhost ~]# tar -zxf mod_fcgid.2.2.tgz -C /usr/src/
[root@myhost ~]# cd /usr/src/mod_fcgid.2.2/
[root@myhost mod_fcgid.2.2]# vi Makefile
#修改top_dir参数,值为 apache 的安装路径
top_dir      = /usr/lib/httpd
[root@myhost mod_fcgid.2.2]# make && make install

5、修改httpd配置文件,使支持 mod_fcgid

[root@myhost ~]# vi /etc/httpd/conf/httpd.conf
#文件末追加下面这段
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule mod_fcgid.c>
    #AddHandler fcgid-script .fcgi .fpl
    IPCCommTimeout 40
    IPCConnectTimeout 10
    SocketPath /var/lib/fcgid_sock/
</IfModule>

6、创建 fcgid sock 目录,并设置权限

[root@myhost ~]# mkdir /var/lib/fcgid_sock/
[root@myhost ~]# chown http:http /var/lib/fcgid_sock/
[root@myhost ~]# chmod 755 /var/lib/fcgid_sock/


三、安装rails等 ,且创建几个rails项目做测试
1、安装rails、fcgi、sqlite3这三个gem

[root@myhost rubygems]# pwd
/rubygems
//到网站http://files.rubyforge.vm.bytemark.co.uk/下载这些gem到本地来本地安装,这样速度会快很多
[root@myhost rubygems]# ls
actionmailer-2.0.2.gem  activeresource-2.0.2.gem  rails-2.0.2.gem
actionpack-2.0.2.gem    activesupport-2.0.2.gem   rake-0.8.3.gem
activerecord-2.0.2.gem  fcgi-0.8.7.gem            sqlite3-ruby-1.2.4.gem
[root@myhost rubygems]# gem i rails fcgi sqlite3 --local

2、创建第一个rails项目

[root@myhost rails]# pwd
/var/www/rails
[root@myhost rails]# rails 001 -d sqlite3
[root@myhost rails]# cd 001
[root@myhost 001]# rake db:create:all
[root@myhost 001]# script/generate controller blog show
//启动服务器并测试看可否正常访问
[root@myhost 001]# ruby script/server
[root@myhost 001]# w3m http://127.0.0.1:3000/blog/show

3、创建第二个rails项目

[root@myhost rails]# pwd
/var/www/rails
[root@myhost rails]# rails 002 -d sqlite3
[root@myhost rails]# cd 002
[root@myhost 002]# rake db:create:all
[root@myhost 002]# ruby script/generate scaffold post title:string body:text published:boolean
[root@myhost 002]# rake db:migrate
//启动服务器并测试看可否正常访问
[root@myhost 002]# ruby script/server
[root@myhost 002]# w3m http://127.0.0.1:3000/posts


四、配置使用apache来访问rails项目(注意:这时使用的是cgi,而非fcgi),我们都以创建虚拟站点来做
1、我们先来看看项目中 public/.htaccess 文件中到底写的啥

[root@myhost 001]# pwd
/var/www/rails/001
[root@myhost 001]# sed '/^#/d' public/.htaccess
#限于篇幅,注释都没有显示,建议去看看里面的注释
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI

#因为这里RewriteEngine On,所以要修改httpd.conf文件,确保已加载mod_rewrite模块
RewriteEngine On

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

2、用apache来访问rails项目方法一:一个rails项目用一个主机头,这样做的不好处是每新增一个rails项目都要修改 httpd.conf 文件且还要重起 httpd 服务器
修改 httpd.conf 文件,追加下面这段后重起 httpd 服务器

<VirtualHost *:80>
        ServerName rails1.net
        DocumentRoot "/var/www/rails/001/public"
        <Directory "/var/www/rails/001/public">
            AllowOverride all
            Order Deny,Allow
            Allow from all
        </Directory>
</VirtualHost>

文件 /var/www/rails/001/public/.htaccess 无须做任何修改直接 http://rails1.net/blog/show 就可访问了
3、用apache来访问rails项目方法二:多个rails项目共用一个主机头,使用Alias指令,这样做的不好处还是每新增一个rails项目都要修改 httpd.conf 文件且还要重起 httpd 服务器
修改 httpd.conf 文件,追加下面这段后重起 httpd 服务器

<VirtualHost *:80>
        ServerName rails2.net
        alias /001 "/var/www/rails/001/public"
        <Directory "/var/www/rails/001/public">
            AllowOverride all
            Order Deny,Allow
            Allow from all
        </Directory>
</VirtualHost>

修改文件 /var/www/rails/001/public/.htaccess ,添加一行 RewriteBase /001,修改好的.htaccess文件大概如下

[root@myhost rails]# sed '/^#/d' 001/public/.htaccess
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteBase /001
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

而修改完 .htaccess 后是不需要重起 httpd 服务器的,这时就可以 http://rails2.net/001/blog/show 访问了
4、用apache来访问rails项目方法三:多个rails项目共用一个主机头,使用AliasMatch指令,这样做的好处是每新增一个rails项目后无须修改 httpd.conf 文件且无须重起 httpd 服务器,只需要修改新增rails项目中 public/.htaccess 文件既可
修改 httpd.conf 文件,追加下面这段后重起 httpd 服务器

<VirtualHost *:80>
        ServerName rails3.net
        AliasMatch ^/([^/]*)(.*) "/var/www/rails/$1/public$2"
        <Directory "/var/www/rails/*/public">
            AllowOverride all
            Order Deny,Allow
            Allow from all
        </Directory>
</VirtualHost>

修改文件 /var/www/rails/001/public/.htaccess ,添加一行 RewriteBase /001
修改文件 /var/www/rails/002/public/.htaccess ,添加一行 RewriteBase /002
这样就可以 http://rails3.net/001/blog/show 和 http://rails3.net/002/posts 访问了
此时新增一rails项目 003 且修改文件 002/public/.htaccess ,添加一行 RewriteBase /003,最后访问测试看看,过程如下

[root@myhost rails]# pwd
/var/www/rails
[root@myhost rails]# rails 003 -d sqlite3
[root@myhost rails]# cd 003
[root@myhost 003]# rake db:create:all
[root@myhost 003]# echo RewriteBase /003 >> public/.htaccess
[root@myhost 003]# w3m http://rails3.net/003/rails/info/properties
//w3m如果返回 For security purposes, this information is only available to local requests. 就说明这个方法三是可行的


五、配置使用apache、mod_fastcgi来访问rails项目
修改 public/.htaccess 文件中
Quotation

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]


Quotation

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

即可
修改好的.htaccess文件大概如下

[root@myhost rails]# sed '/^#/d' 001/public/.htaccess
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteBase /001
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"


六、配置使用apache、mod_fcgid来访问rails项目
修改 public/.htaccess 文件中
Quotation

AddHandler fastcgi-script .fcgi
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]


Quotation

AddHandler fcgid-script .fcgi
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

即可


Last modified by vkill on2008/10/23 13:18
类别:linux system | Tags: , , , , , , , | 0 条评论, 690 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: