MovableTypeプラグインの独自CGIをNginxに対応させる方法
MovableTypeプラグインの独自CGIをNginxに対応させる方法を紹介します。
これはMovable Type Advent Calendar 2023の24日目の記事です。
1.はじめに
以前、Workflowプラグインの独自CGI(mt-preview.cgi)がNginx環境に対応しておらず、アクセスすると「Not Found」というお客様からの申告があり、そのときの対処方法を備忘録で残しておきます。
MTプラグインで独自CGIを実装される方は、変更後または追加部分のみ参照されればよいかと思います。
冗長な修正があるかもしれませんが、実際に修正して回復した内容ということでそのまま掲載しておきます。
2.対処方法
まず。独自CGIの下記の1行を修正。
変更前
use MT::Bootstrap App => 'Workflow::App';
変更後
use MT::Bootstrap App => 'MT::App::Workflow';
config.yamlに"key"を追加。
key: Workflow
プラグインアプリケーション(独自CGI)の定義を丸々追加。ここでは、
- handler
- script
- cgi_path
の3項目を定義します。
applications:
workflow:
handler: MT::App::Workflow
script: '$Workflow::MT::App::Workflow::script_name'
cgi_path: >
sub {
my $path = MT->config->CGIPath;
$path =~ s!/$!!;
$path =~ s!^https?://[^/]*!!;
$path .= '/plugins/Workflow';
return $path;
}
エラーが発生した状態のCGI(Workflow.pm)はMT::App::CMSを継承していたのを、MT::Appを継承するように変更。
変更前
use base qw( MT::App::CMS );
変更後
use base qw( MT::App );
それに伴い、lib/Workflow/App.pm → lib/MT/App/Workflow.pm に移動。
移動したWorkflow.pm に、idとscript_nameを追加。
sub id {'workflow'}
sub script_name {'mt-preview.cgi'}
修正前はinit_requestしかなかったので、initを追加し、旧init_requestのadd_methodsをinitに移動。
変更前(抜粋)
sub init_request {
my $app = shift;
$app->SUPER::init_request(@_);
$app->add_methods( preview => \&preview );
$app->{ default_mode } = 'main';
$app->{ requires_login } = 0;
}
変更後(抜粋)
sub init {
my $app = shift;
$app->SUPER::init(@_);
$app->add_methods( preview => \&preview );
$app->{ default_mode } = 'main';
$app;
}
sub init_request {
my $app = shift;
$app->SUPER::init_request(@_);
$app->{requires_login} = 0;
}
これで独自CGIがNginxで動作するようになりました。
Posted by yujiro このページの先頭に戻る
- Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処
- 旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法
- MT6.2のファイルアップロードで「Undefined subroutine &POSIX::strftime」になる問題の対処
- Movable Typeのファイルアップロードで「アップロードしたファイルは大きすぎます。」というエラーになる場合の対処
- Movable Typeのパスワード変更で「URLが不正です。」というエラーなる件についての対処
- Movable Typeで「Cannot find column 'blogs' for class 'MT::Blog'」となる場合の対処
- Movable TypeでMTPageNextタグが効かなくなる不具合について
- Movable Typeの復元で「Request-URI Too Large」になるときの対処
- サーバ故障と「Connection error: Too many connections」エラーおよびMySQLテーブル破損について
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method "label" on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)
- XREA/CORESERVERでMovable TypeのCaptchaが表示されない不具合について
トラックバックURL
コメントする
greeting