Dancer2 アプリケーションを Apache で cgi スクリプトとしてデプロイしようとしています。CGI スクリプトとして実行するための Dancer2 展開ガイドの指示に従いましたが、ブラウザーでアプリケーションにアクセスしようとすると、HTTP 504 ゲートウェイ タイムアウトが発生します。
私は PSGI/Plack の世界にまったく慣れていないので、診断がかなり外れている可能性がありますが、リクエストすると次のようになります。
http://<hostname>/
リモートホストからdispatch.cgi
ポート3000でリッスンするサーバーを起動し、リクエストがタイムアウトするまで入力を待機します。Apache エラー ログに表示される内容は次のとおりです。
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] [ip2map:30142] core @2013-11-04 09:44:32> Registered Dancer2::Core::DSL__WITH__Dancer2::Plugin::Ajax=HASH(0x3414560) in /var/www/ip2map/public/../lib/ip2map.pm l. 3
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] [ip2map:30142] core @2013-11-04 09:44:32> Registered Dancer2::Core::DSL__WITH__Dancer2::Plugin::Ajax__WITH__Dancer2::Plugin::Database=HASH(0x3414560) in /var/www/ip2map/public/../lib/ip2map.pm l. 4
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2 v0.10 server 30142 listening on http://0.0.0.0:3000
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2::Plugin::Ajax (0.10)
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2::Plugin::Database (2.10)
[Mon Nov 04 09:45:32 2013] [warn] [client 128.117.20.57] Timeout waiting for output from CGI script /var/www/ip2map/public/dispatch.cgi
[Mon Nov 04 09:45:32 2013] [error] [client 128.117.20.57] Script timed out before returning headers: dispatch.cgi
これが私のApache構成です(Apache v2.2.15):
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mcmes21.cgd.ucar.edu
ServerAlias mcmes21
DocumentRoot /var/www/ip2map/public
ServerAdmin mcarey@ucar.edu
<Directory "/var/www/ip2map/public">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AddHandler cgi-script .cgi
</Directory>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /dispatch.cgi$1 [QSA,L]
ErrorLog /var/log/httpd/ip2map-error_log
CustomLog /var/log/httpd/ip2map-access_log common
</VirtualHost>
私のアプリケーションは、次の Apache 構成で mod_proxy 経由で Starman を使用すると正常に動作することに注意してください。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mcmes21.cgd.ucar.edu
ServerAlias mcmes21
DocumentRoot /var/www/ip2map
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
</VirtualHost>
これをCGIとして機能させる方法を知っている人はいますか?
注: この質問は昨日、dancer-users メーリング リストにも投稿しました。