PowerCMS ブログ

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
技術情報

ページの先頭へ