PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[事例紹介] 株式会社アートシステム様 を追加しました。
[ブログ] PowerCMS サポートの実績 (2024年10月) を追加しました。

PSGI Plack 環境で PowerCMS を動かす

PSGI/Plack について

PSGI とは、Perl Web Server Gateway Interface の略で、Perl で書かれたウェブアプリケーションのサーバーレイヤーを抽象化する為の仕様です。Python の WSGI や Ruby の Rack に相当します。PSGI に対応したアプリケーションは、PSGI サーバーと呼ばれる PSGI に準拠したウェブアプリケーションサーバー上で動作します。

PSGI サーバーには簡易的な Web サーバ機能しか実装されていない事が多いので、実際の運用に際しては別途 Web サーバを用意することをおすすめします。nginx や Apache など PSGI サーバーにリバースプロキシ出来る機能を備えている Web サーバーであれば、特に制限無く利用する事ができます。

PowerCMS では、Starman を PSGI サーバーとして利用する事を想定しています。もちろん、Starman 以外の PreFork 型の PSGI サーバーや、PSGI を利用せず、CGI として Apache などの Web サーバーで運用することも引き続きできます。

Plack のインストール

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

cpanm Task::Plack

あるいは

cpan Task::Plack

必要な設定

PIDFilePath 環境変数

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

  • インストール/アップグレードの完了時
  • デバッグモードなどシステム設定の変更
  • カスタムフィールドの追加/削除

実際には、上記作業が発生した時に、MT が環境変数 PIDFilePath で指定されたファイルに記述されているプロセス ID に対して SIGHUP を送出します。この動作を実現するため、PSGI サーバーで pid の指定を行って保存先を指定し、かつ、 mt-config.cgi にも同ファイルへのパスを追記してください。

# Append PIDFilePath to mt-config.cgi

PIDFilePath /var/run/mt.pid
# then run starman
$ starman --pid /var/run/mt.pid ./mt.psgi

注意事項・制限事項

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

plackup コマンドで起動される Web サーバーはリクエストを順次処理するシンプルな実装であるため、例えば自身の記事に対してトラックバックを送信した場合などのときにデッドロックが発生します。

  • 送信側のプログラムコードでは、トラックバックのリクエストに対するレスポンスが帰ってくるまで処理がブロッキングされる
  • (同一スレッドで処理待ちとなる)トラックバック受信側は、送信側の処理が完了するまで、リクエストの処理が開始されない

現在のところ、この問題に対処する予定はありません。また、トラックバック以外の機能でも同様の問題が発生する可能性は考えられます。本番環境では、prefork 型など、並列処理が可能な PSGI サーバの利用を推奨します。

次は
一覧へ

お問い合わせ

お問い合わせフォームがご利用できない場合は、以下のメールアドレスからも受け付けております。
contact@alfasado.jp

製品資料ダウンロード

パンフレットデータ、提案用資料などがダウンロードできます。