#少了一步安裝 fcgi本身的
#將public下面的所有ruby路徑改正確
#詳細說明如何啟用fcgi而不是cgi(改.htpaccess)
#將ruby-fcgi按README安裝完全
#啟用SYBASE要設置/etc/ld.so.conf加上sybase的lib路徑(APACHE以NOBODY啟動,LD_LIBRARY_PATH似乎沒用)
1,為編譯fastcgi,安裝httpd-dev包
rpm -ivh httpd-dev***.rpm #會要求安裝其它依賴包
2,構建mod_fastcgi.so,正常構建會報缺少文件(對fc4自動安裝apache而言),會自動加入/usr/lib/httpd/module中,/etc/httpd/conf/httpd.conf也會自動加載(但語法不對)
apxs -n mod_fastcgi -i -a -c mod_fastcgi.c fcgi_buf.c fcgi_config.c fcgi_pm.c fcgi_protocol.c fcgi_util.c #在解壓后的mod_fast2.4.2包中執行,構建mod_fast.so
chmod 755 /usr/lib/httpd/modules/mod_fastcgi.so #修改訪問權限
3,ruby的fcgi模塊正確安裝方法
1,下載ruby-fcgi-0.8.7.tar.gz
2,ruby install.rb config -- --with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib (指向正確的fcgi安裝路徑)
3,其余按readme
4,為apache配置虛擬主機(客戶機的host要配合指向)---還要加上一條時間選項
<Directory /var/www/>
AllowOverride all
</Directory>
LoadModule fastcgi_module modules/mod_fastcgi.so
FastCgiConfig -singleThreshold 100 -killInterval 300 -autoUpdate -idle-timeout 240 -pass-header HTTP_AUTHORIZATION
AddHandler fastcgi-script .fcgi
<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /var/www/rails/testapp/public #testapp即為你rails程序的根目錄
ServerName www.example.com
ErrorLog /var/log/httpd/testapp-error_log
CustomLog /var/log/httpd/testapp-access_log common
Options Indexes ExecCGI FollowSymLinks
RewriteEngine On
</VirtualHost>
6,啟動apache,看歡迎頁面
apachectl start #用這種方式可以在控制臺查看錯誤消息(應該會報一條無效的加截so的行190?)
7,根據需要修改rails應用(producation環境,facgi的dispatch,數據庫支持)
8,后續修改如下
chown -R apache.apache ${railsapp}
mkdir /tmp/fcgi_ipc
httpd.conf-->FastCgiIpcDir "/tmp/fcgi_ipc/"
chown -R apache.apache /tmp/fcgi_ipc
錯誤情況分析:
1,apache的error.log或app的error.log會報:(權限問題)
[Sun Nov 19 14:05:29 2006] [crit] (13)Permission denied:
FastCGI: can't create (dynamic) server "/var/www/rails/testapp/public/dispatch.fcgi":
bind() failed [/etc/httpd/logs/fastcgi/dynamic/3c713fbde3044b67e240a7bf3791f36b]
2,測試dispatch.fcgi的方法ruby -d dispatch.fcgi
3,app下面的fastcgi.crash.log中產生----注意,說方法丟失可能是c的動態庫沒有找到
Dispatcher failed to catch: undefined method `is_cgi?' for FCGI:Class (NoMethodError)
fcgi的問題