2007年8月6日 星期一

在FC6上安裝Ruby on Rails + FastCGI + Apache + mod_fcgid

參考文章:
http://wiki.rubyonrails.com/rails/pages/Rails+on+CentOS+4.4+with+Apache+and+FastCGI+Simply/versions/13

1. 安裝apache module
[bash]
yum install mod_fcgid
[/bash]

2. 安裝fastcgi
因為ruby-fastcgi建置的時候需要fastcgi的header所以得安裝
下載:
http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz

[bash]
tar zxf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make all install
[/bash]



3. 安裝ruby-fastcgi
[bash]
gem i fcgi -- --with-fcgi-dir=/usr/local
[/bash]

4. 修改SELinux設定
你可以使用xwindow,或是編輯/etc/sysconfig/selinux,請將SELINUX設定為disabled後重新開機。

5. 編輯/etc/httpd/conf.d/fcgid.conf
加入這幾行
[bash]
SocketPath /tmp/fcgidsock
SharememPath /tmp/fcgidshm
DefaultInitEnv RAILS_ENV production
[/bash]

SocketPath和SharememPath都相當的重要,因為fcgid的問題,所以只能設定為/tmp下,其他目錄都會有問題。

6. 新增專案設定檔

假設你的Rails專案叫做myproject,檔案都在/opt/myproject,就在/etc/httpd/conf.d/新增一個myproject.conf
接著你要考量兩種情況,如果你的專案打算放在URL的根路徑,如http://www.mysite.com,那就一定要用VirtualHost。
但如果你的網頁要放在其他子路徑,如http://www.mysite.com/myproject,使用Alias就可以了。
一般來說如果是想要放在根路徑的檔案是不能夠使用Alias的(例如Alias / /some/dir...),會造成apache出現recursion error。

使用VirtualHost

<VirtualHost *:80>
SetEnv RAILS_ENV production
DocumentRoot /opt/myproject/public/
ErrorLog /opt/myproject/log/apache.log
<Directory /opt/myproject/public>
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
</Directory>
</VirtualHost>
使用Alias
<VirtualHost *:80>
Alias /myproject /opt/myproject/public
SetEnv RAILS_ENV production
ErrorLog /opt/myproject/log/apache.log
<Directory /opt/myproject/public>
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
</Directory>
</VirtualHost>
7. 編輯/opt/myproject/public/.htaccess
一樣是兩種情況,如果你的專案是在根路徑,那就啥都不用改。
如果不是的話,要加上RewriteBase /myproject
此外也應該要改
AddHandler fcgid-script .fcgi
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
8. 編輯/opt/myproject/public/dispatch.fcgi
注意這一個script的preprocessor,也就是第一行,一個要是一個可以執行的ruby直譯器路徑,如#!/usr/bin/ruby
檢查好了之後,下指令
[bash]
chmod 755 /opt/myproject/public/dispatch.fcgi
chmod -R 777 /opt/myproject/log
chmod -R 777 /opt/myproject/tmp
[/bash]

接著可以執行看看dispatch.fcgi,如果會在log/產生一個fasfcgi.crash.log,表示應該沒有啥太大問題,重新啟動apache後就可以輸入URL試試看了。

沒有留言 :

張貼留言