MojolicousからCGIを呼ぶ
投稿:2019-12-02
サーバーがMojoliciousだけど、昔ながらのCGIスクリプトを使いたくなったので、なんとかして呼び出したい。
- CentOS 7.2
- Perl 5.30.0
- Mojolicous 8.26
- Perlbrew
- cpanm
CPANにあるCGIのプラグインを利用します。
Mojolicious::Plugin::CGI - Run CGI script from Mojolicious - metacpan.org
それだけではPerlbrewの対応ができないのと、設定のフォルダから自動的にCGIスクリプトを登録したいです。
そこで、Mojolicous起動時に読み込まれるプラグインを作りました。
設定のcgi_rootはCGIスクリプトがあるディレクトリのパスです。
モジュールのanyfileは単にファイルをクライアントに渡すものです。
package EnableCGI;
# エディタの文字コード判定用に漢字のコメントを置いておきます。
use Mojo::Base "Mojolicious::Plugin";
sub register {
my ($self, $app, $conf) = @_;
if ($conf && exists $conf->{cgi_root}) {
$app->log->debug("----------");
$app->log->debug("EnableCGI有効");
$app->log->debug("CGIルート:$conf->{cgi_root}");
for (map {s#^.*/##r} glob "$conf->{cgi_root}/*.cgi") {
$app->log->debug("CGI:$_");
$app->plugin(CGI => [ "/$conf->{cgi_root}/$_" => "/usr/bin/cd; cd $conf->{cgi_root}; /usr/bin/env perl -T -I . $_" ]);
}
$conf->{route}->get("/$conf->{cgi_root}/#filename")->to("anyfile#through", directory => "../$conf->{cgi_root}");
for (grep {-d} glob "$conf->{cgi_root}/*") {
$app->log->debug("追加ディレクトリ:$_");
$conf->{route}->get("/$_/#filename")->to("anyfile#through", directory => "../$_");
}
}
}
1;