MovableTypeプラグインの独自CGIをNginxに対応させる方法

MovableTypeプラグインの独自CGIをNginxに対応させる方法

Posted at December 24,2023 11:55 PM
Tag:[MovableType, Plugin, TroubleShooting, Workflow]

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で動作するようになりました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)