日頃 Amon2 を便利に使わせてもらっています。
カスタマイズもしやすくてとても気に入っていますが PSGI 前提なので CGI でも同じコードを使いたい時のためのメモ。
想定している環境
- Webサーバとして Apache が動いていて、ドキュメントルートなど諸々の設定はそちらでやる。
- mod_rewrite が使用できる。
- .htaccess の設置が可能。(PSGIと同一URLを使いたい場合)
- amon2 アプリの設置場所は $ENV{DOCMENT_ROOT}/myapp/ と仮定
- amon2 ver 6.11
手順
amon2 でアプリをセットアップ。
% cd $ENV{DOCUMENT_ROOT}
% amon2-setup.pl myapp
...
% cd myapp
% carton install
.cgi ファイルを設置
以下の内容を myapp/app.cgi として保存し、Apache での実行パーミッションを立てる。
- ファイル名はapp.cgiじゃなくてもOK。(その場合は.htaccess設置時に適宜読み替える)
- speedy 用のif-elseは本質ではないので、邪魔な場合は else の中だけのこして削ってOK。
myapp/app.cgi
#!/bin/sh
PATH=$PATH:/bin:/usr/bin:/usr/local/bin
if [ "$USE_SPEEDY" != "" ]; then
exec speedy -x "$0" "${1+$@}" -- -t60 -r200 -g$USE_SPEEDY -M60
else
exec perl -x "$0" "${1+$@}"
fi
#!perl
use strict;
use warnings;
use lib qw(lib local/lib/perl5);
use Plack::Util;
use Plack::Loader;
my $app = Plack::Util::Load_psgi("script/myapp-server");
Plack::Loader->auto->run($app);
.htaccess を設置
以下の内容を myapp/.htaccess として保存。
myapp/.htaccess
DirectoryIndex app.cgi
RewriteEngine On
RewriteBase /myapp
RewriteCond %{REQUEST_FILENAME} !app\.cgi
RewriteRule ^(.+) app.cgi/$1
ブラウザから /myapp/${path_info} へアクセスすると、PSGI 起動の時と同じ path_info でアクセスできるようになる。
※ .htaccess の内容は、サーバの環境とかポリシーとかに合わせて適宜変更。
背景
昨今はPSGI主流なのかもしれませんが、port番号だったり、プロセスの監視設定だったりとサーバ管理者との調整も必要になります。
それができる場合ばかりではないので、サーバ側の都合に左右されず開発を進められるようになっていると便利です。