4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amon2をCGIアクセスとして動かす

Last updated at Posted at 2015-02-02

日頃 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番号だったり、プロセスの監視設定だったりとサーバ管理者との調整も必要になります。

それができる場合ばかりではないので、サーバ側の都合に左右されず開発を進められるようになっていると便利です。

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?