PowerCMS™
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[新着情報] PowerCMSクラウド 月額費用の価格改定に関する追加情報を公開します を追加しました。
[よくあるご質問] サポートサイトへ登録しているアカウントの情報を変更することはできますか? を追加しました。
[新着情報] PHP 8.2 に対応した PowerCMS 6.5 の提供を開始 を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMSクラウド > CMSと公開サーバーを分けて運用しているときに環境固有設定の差異を吸収する .mtview.php …

2016年12月02日

CMSと公開サーバーを分けて運用しているときに環境固有設定の差異を吸収する .mtview.php の分岐処理

Copy2PublicプラグインやPowerSyncなどを用いてCMSサーバーと公開側サーバー(Front)を分離して運用している時やlsyncdやlftpなどで両マシンの静的ファイルを同期しているケース。で、両サーバーのOSや公開パスが異なるケースがあります。 静的ファイルの同期だけであれば特に何も気にすることはありませんが、フロントサーバーでダイナミック・パブリッシングやDynamicMTMLを利用している場合、注意が必要になることがあります。

PowerSyncの動作イメージ

例えば、CMSサーバーと公開側サーバーでOSが異なる場合。PowerCMS クラウドのフロントサーバーオプションを利用しているケースなどがこれにあたります(CMSはLinux VM、フロントサーバーはAzure Web Apps)。以下の例ではサイト・パス直下の .mtview.php ファイル内で PHP_OS でOSにより読み込むPHPライブラリのパスを変更しています。

他にも、mt-config.cgiの存在有無を調べて分岐するパターンや、設定ファイルを置いて分岐する方法などが考えられます。

.mtview.phpのOSによる分岐処理の例

<?php
  ## DynamicMTML generated this part; don't remove this line ! ##

    $blog_id    = 1;
    $server_cache = 14400;
    $size_limit   = 1524288;
    if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' ) {
      $mt_dir     = '/powercms/sites/01/mt';
      $mt_config  = '/powercms/sites/01/mt/mt-config.cgi';
      $static_path  = '/powercms/sites/01/mt-static/';
      $indexes    = 'index.html,index.mtml';
      $excludes   = 'php,cgi,fcgi';
      $plugin_path  = '/powercms/sites/01/mt/addons/DynamicMTML.pack/php/';
      $cache_dir  = '/powercms/sites/01/powercms_files/cache';
    } else {
      $mt_dir     = 'D:\\home\\site\\mt';
      $mt_config  = 'D:\\home\\site\\mt\\mt-config.cgi';
      $static_path  = 'D:\\home\\site\\mt-static\\';
      $indexes    = 'index.html,index.mtml';
      $excludes   = 'php,cgi,fcgi';
      $plugin_path  = 'D:\\home\\site\\mt\\addons\\DynamicMTML.pack\\php\\';
      $cache_dir  = 'D:\\home\\site\\powercms_files\\cache';
    }
    $extension  = '.html';
    $use_cache  = 1;
    $conditional  = 1;
    // if alias...
    $alias_name = '';
    $alias_path = '';

    $require_login = NULL;
    $dynamic_caching = NULL;
    $dynamic_conditional = NULL;
    require_once ( $plugin_path . 'dynamicmtml.run.php' );

  ## DynamicMTML generated this part; don't remove this line! /DynamicMTML ##
  ?>

mt:Includeでファイルインクルードしている場合の分岐

AllowFileInclude環境変数を指定して mt:Include タグでファイルをインクルードしている場合、ブログのサイト・パス以下のファイルを取得しにいくため、この場合は別の部分で注意が必要です。

以下の例では、mt-config.cgiにCMS環境か公開環境かを識別する値を指定しておき、その値によってインクルードファイルのフルパスを組み立てて渡すような分岐処理を入れています。

    <mt:Var name="config.ServerEnvironment" setvar="server_environment">
    <mt:If name="server_environment" eq="CMS">
        <mt:Setvar name="include_path" value="/powercms/sites/01/files/">
    <mt:Else>
        <mt:Setvar name="include_path" value="D:\home\site\wwwroot\">
    </mt:If>
    <mt:Setvar name="include_path" value="header.inc" append="1">
    <mt:Include file="$include_path">

その他にも、MTGetEnvでサーバー環境変数を取得して分岐する方法なども検討できるかと思います。


カテゴリー
DynamicMTML
PowerCMSクラウド
PowerSync
技術情報

Recent Entries