読者です 読者をやめる 読者になる 読者になる

CentOSでrailsアプリケーションをlighttpd - fastcgi経由で動かすためのfcgi導入ではまった記録

会社のrailsアプリケーションは、lighttpd - fastcgi - ruby-fcgi という形でつないで動かしている。
で、今回環境構築をしていてはまった箇所があったので、記録がてらさらしてみます。

環境を徒然に書いていくと、

OS
CentOS6.0
lighttpd
1.4.29
gcc
4.4.4
ruby
1.8.7-p352
rails
2.3.14
rubygems
1.3.7

今回はCentosのインストールが終わって、いろいろ設定して、という先から。

lighttpdのインストール

この時点で、ncurses-develやgccなど、おおかたソースからコンパイルするときに使いそうなものは、yum経由で導入済み。

lighttpdのビルドに必要なライブラリの導入

sudo yum install pcre-devel
sudo yum install bzip2-devel

opensslのビルド

cd ~/src
wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz
tar xzvf openssl-1.0.0d.tar.gz
cd openssl-1.0.0d
./config --openssldir=/usr/local/ssl
make
sudo make install

lighttpdのビルド

cd ~/src
wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.29.tar.gz
tar xzvf lighttpd-1.4.29.tar.gz
cd lighttpd-1.4.29
./configure --with-openssl=/usr/local/ssl
make
sudo make install

起動用スクリプトを設置

cd ~/src/lighttpd-1.4.29/doc/initscripts
sudo cp rc.lighttpd.redhat /etc/init.d/lighttpd

/etc/init.d/lighttpdを編集

-lighttpd="/usr/sbin/lighttpd"
+lighttpd="/usr/local/sbin/lighttpd"

chkconfigを設定

sudo chkconfig lighttpd on

ここまでは問題なし。

lighttpd.confの設定やらなんやらはスキップ
railsのアプリに関する内容や、fcgiファイルに付いてもスキップ

fcgiのインストール

で、fastcgiのHP(http://www.fastcgi.com)から、DL&インストール

wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
tar xzvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make

エラー発生

fcgio.cpp:50: error: 'EOF' was not declared in this scope
fcgio.cpp: In member function 'virtual int fcgi_streambuf::overflow(int)':
fcgio.cpp:70: error: 'EOF' was not declared in this scope
fcgio.cpp:75: error: 'EOF' was not declared in this scope
fcgio.cpp: In member function 'virtual int fcgi_streambuf::sync()':
fcgio.cpp:86: error: 'EOF' was not declared in this scope
fcgio.cpp:87: error: 'EOF' was not declared in this scope
fcgio.cpp: In member function 'virtual int fcgi_streambuf::underflow()':
fcgio.cpp:107: error: 'EOF' was not declared in this scope
make[1]: *** [fcgio.lo] エラー 1
make[1]: ディレクトリ `/home/admin/src/fcgi-2.4.0/libfcgi' から出ます
make: *** [install-recursive] エラー 1

で、'EOF' was not declared というエラーメッセージを頼りに検索していくと以下のページを発見。
http://www.cyrius.com/journal/gcc

C++ header dependencies got cleaned up in GCC 4.3, which broke a lot of code which relied on headers to be included indirectly through some other headers. I found some new build failures with GCC 4.4 related to missing #includes; in particular, #include is missing in a lot of code.

#include を書いていないのがいっぱいあるらしいorz
ということで、気をとりなおして、エラーが発生しているファイル(libfcgi/fcgio.cpp)に対して、includeの羅列の次に、以下の行を追加。

#include <cstdio>

で、続きを行うと、

make
sudo make install

できたー

あとは、gemをインストールして、完了!

結局、includeがないだけだったけど、自分はCをまだ勉強していないので、そもそもうまくエラーがたどれずでした。