PicasaWeb的Flash相簿 Ruby on Rails的效能低落
8月 06

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

1. 安裝apache module

BASH:
  1. yum install mod_fcgid

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

BASH:
  1. tar zxf fcgi-2.4.0.tar.gz
  2. cd fcgi-2.4.0
  3. ./configure
  4. make all install

3. 安裝ruby-fastcgi

BASH:
  1. gem i fcgi -- --with-fcgi-dir=/usr/local

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

5. 編輯/etc/httpd/conf.d/fcgid.conf
加入這幾行

BASH:
  1. SocketPath /tmp/fcgidsock
  2. SharememPath /tmp/fcgidshm
  3. DefaultInitEnv RAILS_ENV production

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:
  1. chmod 755 /opt/myproject/public/dispatch.fcgi
  2. chmod -R 777 /opt/myproject/log
  3. chmod -R 777 /opt/myproject/tmp

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

Leave a Reply