PowerCMS™

【東京セミナー】6月6日(木) 企業Webリニューアル。最初に押えたい要件定義の進め方と、最新CMSで出来ること

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