PSGI Plack環境でMovable Typeを動かす - movabletype/Documentation GitHub Wiki
PSGIとは、Perl Web Server Gateway Interface の略で、Perlで書かれたウェブアプリケーションのサーバレイヤーを抽象化する為の仕様です。PythonのWSGIやRubyのRackに相当します。PSGIに対応したアプリケーションは、PSGI サーバと呼ばれる PSGIに準拠したウェブアプリケーションサーバ上で動作します。
PSGIサーバには簡易的なウェブサーバ機能しか実装されていない事が多いので、実際の運用に際しては別途ウェブサーバを用意する必要があります。Movable Typeでは、nginxやApacheなどPSGIサーバにリバースプロキシ出来る機能を備えているウェブサーバであれば、特に制限無く利用する事ができます。
Movable Type では、StarmanをPSGIサーバとして利用する事を想定しています。もちろん、Starman以外のPreFork型のPSGIサーバや、PSGIを利用せず、CGIとしてApacheを利用して運用することも引き続きできます。
plackupはリクエストを順次処理するシンプルなwebサーバ実装であるため、例えば内部のブログ記事に対するトラックバックを送信した場合などに、以下のようにデッドロックが発生します。
- 送信側のプログラムコードでは、トラックバックのリクエストに対するレスポンスが帰ってくるまで処理がブロッキングされる
- (同一スレッドで処理待ちとなる)トラックバック受信側は、送信側の処理が完了するまで、リクエストの処理が開始されない
Plackのインストールには、Task::Plackを利用すると、関連するモジュールが一括してインストールされるので、簡単でおすすめです。
cpanm Task::Plack cpanm XMLRPC::Transport::HTTP::Plack
或いは
cpan Task::Plack cpan XMLRPC::Transport::HTTP::Plack
Plackのインストールが終わった後は、plackup コマンドで起動できます。ただし、起動時にはmt-config.cgiが必要になりますので、別途作成してください。また、前述の通り実運用の際には、別途PSGIサーバを用意してください。
コンソールを立ち上げて、**MT_HOME**に移動した後に以下のコマンドで起動します。
plackup mt.psgi
このとき、エラーが発生する場合には必要なモジュール類が足りない可能性が有りますので、CPANからインストールしてください。
無事に起動したら、ブラウザから以下のURLにアクセスしてください。Movable Type のログイン画面が表示されればPSGIで起動しています。
mt-config.cgiで指定しされているCGIPathの値です。
以下の様なアプリケーション全体の動作に関わるような設定変更を行った場合、永続化されたアプリケーションの再起動を試みます。
- インストール/アップグレードの完了時
- デバッグモードなどシステム設定の変更
- カスタムフィールドの追加/削除
# then run starman $ starman --pid /var/run/mt.pid ./mt.psgi