PSGI Plack環境でMovable Typeを動かす

yuji edited this page Nov 22, 2012 · 1 revision
Clone this wiki locally

Table of Contents

PSGI/Plackについて

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を利用して運用することも引き続きできます。

内部HTTPリクエストでのデッドロック

plackupはリクエストを順次処理するシンプルなwebサーバ実装であるため、例えば内部のブログ記事に対するトラックバックを送信した場合などに、以下のようにデッドロックが発生します。

  • 送信側のプログラムコードでは、トラックバックのリクエストに対するレスポンスが帰ってくるまで処理がブロッキングされる
  • (同一スレッドで処理待ちとなる)トラックバック受信側は、送信側の処理が完了するまで、リクエストの処理が開始されない
現在のところ、この問題に対処する予定はありません。また、トラックバック以外の機能でも同様の問題が発生する可能性は考えられます。本番環境では、prefork型など、並列処理が可能なサーバの利用を推奨します。

Plack のインストール

Plackのインストールには、Task::Plackを利用すると、関連するモジュールが一括してインストールされるので、簡単でおすすめです。

 cpanm Task::Plack
 cpanm XMLRPC::Transport::HTTP::Plack

或いは

 cpan Task::Plack
 cpan XMLRPC::Transport::HTTP::Plack

Movable Type の起動

Plackのインストールが終わった後は、plackup コマンドで起動できます。ただし、起動時にはmt-config.cgiが必要になりますので、別途作成してください。また、前述の通り実運用の際には、別途PSGIサーバを用意してください。

コンソールを立ち上げて、**MT_HOME**に移動した後に以下のコマンドで起動します。

 plackup mt.psgi

このとき、エラーが発生する場合には必要なモジュール類が足りない可能性が有りますので、CPANからインストールしてください。

無事に起動したら、ブラウザから以下のURLにアクセスしてください。Movable Type のログイン画面が表示されればPSGIで起動しています。

 mt-config.cgiで指定しされているCGIPathの値です。

必要な設定

PIDFilePath 環境変数

以下の様なアプリケーション全体の動作に関わるような設定変更を行った場合、永続化されたアプリケーションの再起動を試みます。

  • インストール/アップグレードの完了時
  • デバッグモードなどシステム設定の変更
  • カスタムフィールドの追加/削除
実際には、上記作業が発生した時に、MTが環境変数PIDFilePathで指定されたファイルに記述されているプロセスIDに対してSIGHUPを送出します。この動作を実現するため、PSGIサーバーでpidの指定を行って保存先を指定し、かつ、mt-config.cgiにも同ファイルへのパスを追記してください。
 # then run starman
 $ starman --pid /var/run/mt.pid ./mt.psgi