MovableTypeの最近のブログ記事

既存環境

  • DB文字セット:EUC-JP
  • PublishCharSet:Shift-JIS
  • MySQL:4.0系

移管後環境

  • DB文字セット:EUC-JP
  • PublishCharSet:UTF-8
  • MySQL:4.0系

作業手順

  1. phpMyAdminにてSQLファイルにてバックアップを作成
  2. English iso-8559-1にて実行
  3. ダウンロードしたファイルのテーブルデータが目視判読可能な事を確認(今回はShft-JISにて判読可能)
  4. ファイルをUTF-8(BOM無し)に変換、改行は念のためLFのみに変換
  5. ¥’を検索し、全て’へと置換する
  6. 別表の文字もエスケープしている¥を削除する
    (文字¥を文字へエディタやスクリプトで変換するのが効率良い)
  7. phpMyAdminにUTF-8でログイン
  8. DB内のテーブルを全てdrop
  9. DBの照会順序を変更(既にujis_japanee_ciの場合は不要)
    ALTER DATABASE `DB名` DEFAULT CHARACTER SET ujis COLLATE ujis_japanese_ci
  10. 修正済みのSQLファイルをインポート
  11. MovableTypeのmt-config.cgiにてPublishCharSetをUTF-8に変更
  12. mt.cgiにログインし、文字化けが無いことを確認
  13. 再構築が正常に行われることを確認
  14. 出力結果が全てUTF-8であることを確認
  15. 終了

エスケープされている文字の一覧

文字コード
81 5C
83 5C
Ы 84 5C
87 5C
89 5C
8A 5C
8B 5C
8C 5C
8D 5C
8E 5C
文字コード
8F 5C
90 5C
91 5C
92 5C
93 5C
94 5C
95 5C
96 5C
97 5C
98 5C
文字コード
99 5C
9A 5C
9B 5C
9C 5C
9D 5C
9E 5C
9F 5C
E0 5C
E1 5C
E2 5C
文字コード
E3 5C
E4 5C
E5 5C
E6 5C
E7 5C
E8 5C
E9 5C
EA 5C
ED 5C
EE 5C

参考サイト
風柳亭 - 別館:書庫のある庵 -:blog_ajax_json_search.jsにパッチ:コメントも含めて検索
暴想:ココログプロとかTypepadとかMTとかブログ人とかその他のブログサービスとかでもAjaxでバックナンバーを検索するJavaScript

●以下をまず入手(prototype.jsはともかく、blog_ajax_json_search.jsはDigicloにより改変されています)

prototype.js

blog_ajax_json_search.js

●検索用データを抽出するテンプレートを作成

インデックステンプレートとして新規に検索データ抽出を作成、出力ファイル名はsearch_data.txtとして以下の内容で作成。インデックステンプレートに連動して再構築をする設定とすること。

 <?xml version="1.0" encoding="utf8"?>
{
data:[
<MTEntries all="1">{
title:"<$MTEntryTitle remove_html="1" encode_js="1"$>"
,link:"<$MTEntryLink$>"
,body:"<$MTEntryBody remove_html="1" encode_js="1"$><$MTEntryMore remove_html="1" encode_js="1"$><MTComments>【<$MTCommentAuthor remove_html="1" encode_js="1"$>】<$MTCommentBody remove_html="1" encode_js="1"$></MTComments>"
},</MTEntries>
{title:"",link:"",body:""}
]
}

●呼び出し用検索窓作成

<script type="text/javascript" src="<$MTBlogURL$>prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>blog_ajax_json_search.js"></script>
<form action="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );">
<input type="text" id="search_box" value="" />
<input type="button" id="search_button" onclick="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );" onkeypress="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );" value="検索" />
</form>

●表示領域の作成
各テンプレートの任意の表示したい位置を<div class="result"></div>で囲む。

サイトを再構築することで利用可能となる。

注意点

エントリーを追加した後、search_data.txtを再構築しなければ検索に反映しないので注意。

 3.2系ではカテゴリー名が日本語の場合、cat+カテゴリーIDが自動でカテゴリーファイルパスとなるが、3.3系では任意にファイル名という形でカテゴリーファイルパスが作成出来る。また任意に指定しない場合、日本語のカテゴリー名から2バイト文字を除いたカテゴリーファイルパスが作成されてしまう。

その為、3.2でアーカイブマッピングのエントリーアーカイブを

primary_category/entry_basename.html

としていた場合にアップグレード後、パーマリンクが異なって構成されてしまう。

回避策として

1)アップグレード後、再構築前にカテゴリー一覧よりファイル名を旧来のcat+IDとして全て修正を施す。 

2)アーカイブマッピングのエントリーアーカイブを既存の物ではなく"カスタマイズ"を選択し、

MTCategoryBasename>/<MTArchiveFile extension='0'>.html

とする

3)上記が完了した段階で再構築を行う

なお、誤って回避策を実行前に再構築をしてしまった場合、スタティック作成にしているとサーバ上に誤ったURIでのファイルが散乱することになるので要注意

要注意 

同一プラグインでバージョン違いにより、ファイル名が異なる場合や、新バージョンを試すにあたって旧バージョンをリネームしてサーバ上に残しておく場合など、同目的のプラグインを複数インストールするとmt.cgiがスクリプトエラーを起こすケースを確認。

その場合、エラー発生時点から遡り、最後にインストールしたプラグインを一端サーバから削除することでmt.cgiのエラーは回避できる。

その後、競合する物を削除する、あるいは利用停止にした上で新たにプラグインをインストールするとエラーは発生しない。

追加研究要

さくらインターネットの専用サーバやKK-NETのレンタルサーバでは発生していないので、apacheや.htaccessでの設定の差異に影響されるらしい。

 

FreeBSDのサーバにMovableTypeをインストールする前にmt-check.cgiを実行すると不足していると指摘されるモジュールがいくつか存在した場合の作業。

FreeBSDサーバに現在実行パスとして/usr/local/bin/perlとして5.8.0系がインストールされている状態で以下をまず実行

perl -MCPAN -e shell

CPANのミラーサイト指定をasia>japan>最寄りサーバにする以外は全てデフォルトでOK。

その後、CPANのプロンプトより

install HTML::Entities

などと言った形で不足しているperlモジュールを追加でインストールしていく。この場合、圧縮ファイルのダウンロードとmake、コンパイルが実行されるので物によってはかなり時間が掛かる事に注意。

MCImagemanagerをインストールし、TinyMCEと組み合わせて使う場合、インストールすべきディレクトリが決まっている。
また、TinyMCEforMTプラグイン上にてImageManager呼び出しをする為の処理を書き加えなければいけない。

MTがインストールされているディレクトリを起点に
/mt-static/TinyMCEforMT/js/tiny_mce/plugins/
にMCImagemanagerのフォルダ毎をコピー。

また、TinyMCEforMTの

plugins :
"table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview
,zoom,flash,searchreplace,print,contextmenu,paste,directionality,fullscreen,
noneditable",

の最後尾を

fullscreen,noneditable,imagemanager",

と書き換える。

もちろん、別途MCImageManegerのconfig.phpを自分の環境に合わせて修正が必要。
※デフォルトではMCImageManegerの設置されているディレクトリ下の画像ディレクトリであるimageに全ての画像がアップロードされ、そこからのリンクがタグとして挿入されてしまう為、セキュリティ上うれしくない。

XREAにて、Movable Type 3.33-jaを導入する場合の注意点

  • XREAのユーザ名に"-"が含まれるとMySQLが使えないので申し込みの際に注意すること。 
  • mt-check.cgi単体では動かない。
  • Movable Type 3.33-jaの全ファイルをアップロードしておく必要あり。
  • mt-config.cgiが無い場合、mt-check.cgiもmt-wizard.cgiも正常に動作しない。
  • MySQLのエンコードはEUC-JPを強く推奨。
  • cgiのパーミッションは全て700。755ではないので注意。
  • StyleCatcher用のthemesや画像のアップロード等のディレクトリのパーミッションを707にする必要あり。777ではない。
  • mt-config.cgiが必須。
  • ◆広告自動挿入対策が必要。public_html直下にインストールすると広告の自動挿入が行われる。よって、広告回避用のxディレクトリを作成しておき、そこへMovable Type 3.33-ja.zipを解凍してアップロードする。
  • コントロールパネルからMySQLでDBを作成しておく。
  • mt-check.cgiの実行前に初期設定が必要。

mt-config.cgiを以下の内容で作成しておく。

CGIPath http://ユーザ名.サーバ番号.xrea.com/x/

ObjectDriver DBI::mysql
Database ユーザ名
DBUser ユーザ名
DBPassword パスワード
DBHost localhost

Apacheがsuexecで稼働する為マスクを設定

DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022

文字コードを設定

PublishCharset EUC-JP


上記内容でmt-config.cgiを作成したら、パーミッションを604にしておく。 
  • mt-check.cgiで動作を確認(しなくてもOK)。そこいらのレンタルサーバよりもインストール済みのモジュールは充実してます。
  • 以下へのアクセスによりインストール開始。

http://ユーザ名.サーバ番号.xrea.com/x/index.html

  • 初期設定を実施し、再構築を行う。ダイナミックパブリッシングを行う場合、自動生成されるtemplates_cのパーミッションを707にしておく。
  • 再構築後に表示を確認し、正常ならインストールは成功。
  • 広告の手動挿入処理。XREAのコントロールパネルの広告HTMLより広告挿入用のJavaScriptをコピーし、インデックステンプレートのメインページ、アーカイブページ、アーカイブテンプレートの全て、システムテンプレートの検索結果の</body>の直前に追加。

この場合、モジュールテンプレートに新規として"xrea-ad"を作成し、その中にJavaScriptをコピー。各テンプレートの</body>の直前に

<$MTInclude module="xrea-ad"$>

といった形で設置し再構築すると手間が掛からない。

◆DB上のテーブルを設計する。

  • フィールドの先頭にDB名_idをindexとし、intで作成する事を忘れない。
  • 各フィールドはDB名_フィールド名とし、varcharで桁数は各フィールドに格納される内容の最大バイト数に準拠させる。
  • フィールドの桁数を越えるデータは入力出来ないので注意。
  • Link、FileなどはそれぞれURLやファイル名が格納されるので注意。
  • リストボックスの場合、全ての要素が格納されるので桁数に注意。
  • index用が入る為、フィールド数は必要なフィールド数+1となる。

◆MySQLのDBにテーブルを作成する。

  • mt_DB名としてテーブルを新規に作成し、設計に従って全フィールドを登録する。

◆RightFieldsの設定を行う

  • Extra Fields タブのData Storage for Extra FieldsからStore data in:を選択
  • データ格納先をCustom SQL database table として選ぶ.

スクリーンショット

◆SQLテーブル名を入力

  • SQL table: に 2.1 にて設定したDB名をmt_無しで入力。
  • Updateボタンをクリック
  • 全てのSQLテーブル上のフィールド名がExtraFiledsとして展開する。
  • 展開したExtraFieldsは全て、ラベル名もフィールド名のままなので各自わかりやすいものに修正して、保存
  • 展開したExtraFieldsは全て、シングルのテキストなので、各自フィールドの用途に合わせてテキストエリアやファイル、チェックボックスなどへ変更する。

以後はPluginDataと同様の作業としてテンプレートの修正が必要となる。

エントリー画面から入力し、ページの保存及び公開やサイトの再構築(必要であれば)を行う。

※既に一度、PluginDataで作成したExtraFieldは自動でSQLテーブルに格納される訳ではないことに注意すること。(再設定と同じである)

  • Fileタイプのフィールドを作成する場合、アップロードディレクトリは事前に用意しておかなければならない
  • アップロード用ディレクトリは環境設定にもよるがパーミッションは777にしておかなければならない
  • 作ったフィールドについては読み込み/書き出し機能では出力されないのでサイト移転の際には自力で再度入力が必要
  • 全てのフィールドを作成した際、各フィールドの名称を一覧表にしておく必要がある
  • Standard Fieldsを変更しない場合、エントリー画面の画面の"表示設定を変更"にて追記や概要を表示しない設定にしておかないとエントリー入力の際に無駄な作業が増える。
  • フィールド名は英単語で作成し、極力短くかつ意味のわかるものにする。
  • ラベル名は入力の際に表示されるのでよりわかりやすくする。
  • Select menuやラジオボタンなどのリスト要素に空白行は設定できないことに注意

#rpm用のPGPキーをインポート

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

#ImageMagickのパッケージを全てインストール

yum -y install ImageMagick*

#Crypt::DSAのチェックをクリア

yum install perl-Crypt-DSA.noarch

#DBD::SQLiteのチェックをクリア

yum install perl-Class-DBI-SQLite.*

#DBD::SQLite2のチェックをクリア

yum search SQLite2

yum install perl-DBD-SQLite2.*

#XML::Atomのチェックをクリア

yum search perl-XML

yum install perl-XML*.*

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMovableTypeカテゴリに属しているものが含まれています。

前のカテゴリはFreeBSDです。

次のカテゴリはOpenPNEです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。