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

PowerCMS ブログ

ホーム > PowerCMS ブログ > トラブルシューティング > WindowsからLinuxへ環境移行した際に管理画面でアイテムが正しく表示されない

2016年10月04日

WindowsからLinuxへ環境移行した際に管理画面でアイテムが正しく表示されない

原因は、mt_asset テーブルの asset_file_path の値指定方法にあります。 Movable Type / PowerCMS のデータベースにおいて「アイテム」は mt_assetテーブルに格納されています。ファイルのパスが格納されているカラムは「asset_file_path」ですが、値を覗いてみると以下のような様式で値が格納されています。

    %r/banner/main_visual.jpg

先頭の「%r」記法について

記法意味コード
%rウェブサイト・ブログのサイト・パス$blog->site_path
%aウェブサイト・ブログのアーカイブ・パス$blog->archive_path
%sサポートディレクトリのパスMT->instance->support_directory_path

Perlでオブジェクトを扱う時の file_path の値

    require MT::Asset;
    my $asset = MT::Asset->load( $asset_id );
    print $asset->file_path;

    # 変換後の値が出力される
    # /var/www/html/blog/banner/main_visual.jpg

変換前の %r/banner/main_visual.jpg をそのまま取得したい時

    require MT::Asset;
    my $asset = MT::Asset->load( $asset_id );
    print $asset->column_values->{ file_path };

    # データベースの値がそのまま出力される
    # %r/banner/main_visual.jpg

ファイルのパスからオブジェクトをロードする

    my $file_path = '/var/www/html/blog/banner/main_visual.jpg';
    my $site_path = $blog->site_path;
    $site_path =~ s!/$!!;
    $file_path =~ s!^$site_path!%r!;
    require MT::Asset;
    my $asset = MT::Asset->load( { file_path => $file_path,
                                   blog_id => $blog_id,
                                   class => '*' } );

    # class => '*' は画像、ビデオ、アイテム、オーディオの区別なくロードするためのおまじない

WindowsからLinuxへ環境移行した際に管理画面でアイテムが正しく表示されない時

バックスラッシュ「\」をスラッシュ「/」に変更する必要があります。バッチとして作成し、実行すると良いでしょう(MTのtoolsディレクトリ配下に設置するバッチのテンプレートはこちら)

    require MT::Asset;
    my $iter = MT::Asset->load_iter( { class => '*' } );
    while ( my $asset = $iter->()) {
        my $file_path = $asset->column_values->{ file_path };
        $file_path =~ s!\\!/!g;
        print "$file_path\n";
        $asset->file_path( $file_path );
        $asset->save or die $asset->errstr;
    }

※PowerCMSの場合、リビジョンバックアップのアイテム XML の中身も置換する必要があります。

同じように(異なるOSプラットフォーム間でに移行時に)調整が必要なのはウェブサイトやブログの公開パス(mt_blogテーブルの blog_site_pathカラムの値)ですが、見落としがちなのは mt_fileinfo テーブルの fileinfo_file_pathです(このテーブルのデータはダイナミック・パブリッシング、DynamicMTMLやキュー経由の再構築で利用されます)。

このテーブルのデータは管理画面からの再構築で再度生成されますのでSQL等でデータを空にしてから、再構築を行えば正しい値に変換されます。

    TRUNCATE TABLE mt_fileinfo;

※rebuild-archives スクリプトは mt_fileinfo テーブルのデータを利用しますので、管理画面から再構築を行う必要があります。


カテゴリー
サポート
トラブルシューティング
技術情報

Recent Entries