2003年11月23日

Weblog改造日記その4〜 文字コードとデータベース

[ blog]

サーバ新調に伴い必然的にWeblogも引っ越しました。
ここで旧サーバのエントリーデータを新サーバに移すという作業が発生します。
ただ引っ越すだけでは面白みが無いのでMovableTypeの根本的なところを再構築しました。

1.データベースを Berkeley DB から MySQL に変更
2.文字コードをUTF-8からEUCコードに変更

どちらもこういう機会だからこそ思い切って実行出来ます。

■データベースを Berkeley DB から MySQL に変更

MT では標準で Berkeley DB をデータベースに利用するのですが、オプションで MySQLやPostgreSQL,SQLite といったRDBMSも使用出来ます。 エントリーが多くなってくるとRDBMSを使ったほうが再構築の時間が早いという話を聞いたので、この機会にMySQLを利用する事にしました。 本当はPostgreSQLのほうが使い慣れているのですが、XOOPSを何かの機会に使ってみたいと思ったのでMySQLをインストールしました。

MySQLのインストールについてはこちらのblogページを参考にさせていただきました。

■文字コードをUTF-8からEUCコードに変更

blogの世界ではUTF-8がスタンダードなのですが、Safari がまだきちんと表示してくれません。 文字化けするわけではないのですが途中で表示が切れてしまうことがあります。最初は自分のコンテンツのせいかと思っていたのですが、他のひとのUTF-8ページを見ても同じように途切れて表示されるのを度々見るので Safariの UTF-8表示に問題があるようです。文字エンコードをデフォルトからUTF-8にしたり、その逆にしたりするときれいに表示されるのですが、これはまだSafariがバージョン1.1 ということで今後のバグフィックスを待つしか無いようです。 Safariユーザを見捨てるという選択肢もあるのですが、僕自身Safariユーザですし、ここを見に来てくれる友達もSafariユーザが多い。おまけにMicrosoft は MacIE の開発中止を発表してしまった。 という事でEUC コードへの変更を決意しました。

まずは新サーバで新しいMTをインストール。日本語ランゲージパックをインストールしてEUC対応させます。ここまではUTF-8で立ち上げるかEUCで立ち上がるかの違いだけなので何も難しい事はありません。
基本的な設定を旧サーバと同様にセッティングして、次にエントリーデータの移行です。
MovableType の管理画面には標準でデータのエキスポート、インポート機能が付いています。
これは他のWeblogツールからMTに移行したりデータのバックアップを取るのにも使えますが、今回のようにサーバの引っ越しの際にも役立つ機能です。
「書き出し・読み込み」メニューの「BananaBlog からエントリーを書き出す」のリンクをクリックしてデータをローカルにセーブします。
ローカルにセーブされたファイルはUTF-8になっているのでテキストエディタ等で開いてEUCコードに変更保存します。
そしてそのファイルをMTのcgiディレクトリ下のimportディレクトリにアップロードします。
再び管理画面の「書き出し・読み込み」メニューから「エントリーの読み込み」ボタンを押せばインポート終了! あっけなくデータは移行されました。

■不具合ひんぱつ

これで難なく移行完了!といけば理想なのですが、そうは問屋がおろしません。不具合があちこちに現れます。

・mt-rssfeed のエラー

XML-RPC の標準が UTF-8 ということで何となくいやな予感はしていたのですがやっぱりEUCだと文字化けします。正確に言えば処理は正しく動いているのですが出力されるのが UTF-8 なのでEUCのページに埋め込むと文字化けするわけです。ではどうやって出力をEUCにするのか? mt-jcode を使う方法もあるようですが 別テンプレートにして mt-rebuild.pl を cron で定期的に実行している自分は単純明快にcronシェルの最後で nkf 使っちゃいました。終わりよければ全て良し。 FileMgr/Local.pm で Wide character in print at というメッセージが出る事もありますが特に気にしなくてもいいようです。 cron実行してるのなら RSSFeed 用のテンプレートの「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する」のチェックははずしておきましょう。

余談ですが、僕はRSSFeedテンプレートの中に友達の名前として日本語を固定で使ってます。
これをテンプレートとして管理画面で登録するとEUCになります。しかし mt-rssfeed は UTF-8 で出力するので文字化けします。どうすればいいんでしょう? これはiBlog で使われている数値文字参照形式の文字コードを使用しました。iBlog を使っているページのHTMLソースを見ると日本語の部分が
あいうえお
のような文字列になっているのがわかります。これが数値文字参照と呼ばれるものです。
僕はiBlogで文字入力したものをコピーペーストしました。

・aws.pl のエラー

Amazon Web Service 用のプラグインもご多分に漏れず EUC だと問題ありです。

MT::App::CMS=HASH(0x80655e8) Use of uninitialized value in sprintf at /var/www/html/mt3/plugins/aws.pl line 148.
MT::App::CMS=HASH(0x80655e8) Wide character in print at /var/www/html/mt3/lib/MT/FileMgr/Local.pm line 88.
このようなエラーでデータを引っ張ってこれず空白になってしまう模様。
これもいろいろ調べてみるとこちらに対処法が載っていたのでさっそく試してみます。
うまく行きそうな感じだったけど今度はなぜか

syntax error at line 1, column 49, byte 49 at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/XML/Parser.pm line 185
こんなかんじのエラーが。
途方にくれましたがサーバリブートしてみたらエラーが出なくなりました。謎。

・最新のコメントが表示されない

何事も無かったかのように最新のコメントが一切表示されなくなりました。 いろいろ調べてみるとMySQLを使用している時に起こる事があるようです。 「一時的なテーブルを作成する権限」というのが必要なそうなので以下のコマンドで調べてみると mysqlaccess localhost mtuser mtdata -p -U root -P 権限設定一覧の Create_tmp_table_priv が "N" になっていました。こいつに権限割当してやれば良さそうです。 mysql -u root mysql -p grant create temporary tables on mtdata.* to mtuser@localhost identified by 'password'; これで最新のコメントが表示されるようになりました。

・RSS が EUCで出力される

MT の文字コードをEUCにすると RSSもEUCコードで出力されます。 それでいいじゃんという気もしますが、受け取り側でEUCを認識してくれないと文字化けしたりおかしなことになったりします。受け取り側に対応してもらう方法もありますが RSS を公開している以上、公開側で対応するのが正しい選択でしょう。 要はMTコンテンツはEUCでもRSSはUTF-8で出力するようにするという事です。 こちらのページを参考に対応しました。 これでRSSもばっちりです。

このようにデータの移行自体はあっさり行えたのですが他の部分、特にXML関連の部分でとても苦労しました。EUCにしてSafariで問題なく表示出来るようになったのはいいのですが XMLを利用した面白いプラグインが出たりする度に対応しなければならなくなる可能性があります。基本機能しか使わないのであればいいかもしれませんが、いろんなMTの機能を使ってみたい人にはEUCでの運用はいばらの道かもしれません。こんなことしてる間にSafariのバグフィックスが明日リリースされても不思議ではないですし。MTをこれから立ち上げようとしている方は悪い事は言わないので UTF-8 にしましょう(笑)
僕もきっとそのうちまた UTF-8 に戻すと思います。

11月28日追記

・TrackBack 文字化け対策

TrackBack を送信すると文字化けする事に気づきました(汗)しかもMac系のライターとして著名な林 信行さんのblogサイトに。。(大汗) こっちが悪いのに逆に謝られてしまって大恐縮です。。 TrackBackも何もしないとEUCコードでTrackBackを送ってしまうので送り先が特別な処理をしない限り文字化けのTrackBackを送ってしまう事になります。一度送ってしまったTrackBackはこちらからは削除出来ません。 これも前述のRSS同様に送信側で対応しておくのがマナーでしょう。気付かないでTrackBackを送りまくると新手のスパマーと間違えられるので注意しましょう。(^^; この対策はEUCユーザーの強い味方?みらのさんのblogページを参考に修正対応しました。 修正する時は万一動かなくなった時の為に修正前のものをバックアップしておきましょう。 デモ用に昔作ったblogページにテストでTrackBackを送ってみましたが文字化けしなかったのでたぶんこれでイケてると思います。 今度 TrackBack 打つ時はちょっとドキドキです。。(苦笑)
11月30日追記

・TrackBack 受付

TrackBack を他サイトから受け付けられない状態になっていました。 上記と同様にみらのさんのblogページを参考に修正しました。とりあえずうまく受け取れる事を確認しました。 ただこのページを見ると内容が古いと追記してあるので、みらのさんの最新日本語パッチを使うのが一番いいのかもしれません。
12月15日追記

・TrackBack 受付修正

上記方法ではTrackBackを受け付ける際に送られてくるサイトによっては文字化けが発生することがわかりました。 結局、横着をせずにみらのさんの最新のパッチ情報を元に手動で修正(全て見直し)。 前回の修正部分は必要無いので忘れずに元に戻しておきましょう。

投稿者 うっちー : 2003年11月23日 14:52 | コメント (5) | トラックバック (7) このエントリーを含むはてなブックマーク


コメント

さすが!ウッチーさんのこだわり屋さんなところがうかがえますな。いろいろと勉強になりました。たしかにBLOGの世界はUTF-8が標準ですよね。

Posted by: KYO : 2003年11月24日 09:31

いやいや結構アバウトなんだけどね。(^^;
Safari の UTF-8 認識の問題については
こんなの
http://naoya.dyndns.org/~naoya/mt/archives/000692.html
も出ているようですね。
試してないけど。

Posted by: うっちー : 2003年11月24日 15:41

自己レスです。
TrackBack 文字化け対策について追記しました。

Posted by: うっちー : 2003年11月28日 02:06

はじめまして★

「サーバリブートしてみたらエラーが出なくなりました。謎。」
という言葉に助けられました。確かに謎ですが、それで解決するなら…。Lolipop使ってるんですけど、httpdを再起動してもらって解決しました。
MTAws使えなくなるかとヒヤヒヤしましたが、これからも使っていけそうです。ありがとうございました。

Posted by: kenji : 2004年01月28日 22:44

kenjiさん、はじめまして。コメントいただきありがとうございます。

Parser.pm のエラーは何かのタイミングで余計な情報がサーバ側にキャッシュされてしまうのかもしれませんね。
こんなやっつけ対応の情報でもお役に立てたのなら嬉しいです(笑)

Posted by: うっちー : 2004年01月28日 23:34
コメントする



※非表示





名前、アドレスを登録しますか?






Trackback
http://www.banana21.com/cgi-bin/MvType/mt-tb.cgi/89


Title: MTリビルドでエラー
Excerpt: syntax error at line 1, column 49, byte 49 at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/XML/Parser.pm line 185 出ました、うちでも。多くのサイトで既に様々な報告がなされています。 基本的にMTAwsの使用をやめる事によって解決がなされていました...
Weblog: eXpirituaLog+
Date: 2004年01月28日 22:34
Title: VineLinuのMTで最近のコメントが
Excerpt: VineLinuのMTで最近のコメントが表示出来ない件だけどMT::App::CMS=HASH(0x8065608) Use of uninitialized value in concatenation (.) or string at /var/www/html/mt3/lib/MT/ObjectDriver/DBI.pm line 74.なんてエラーが表示されて最近のコメントが表示されない。何回...
Weblog: Toyoaki's PC
Date: 2004年03月06日 10:43
Title: テンプレート復活
Excerpt: 前のテンプレートを使うとエラーが出る件をMLで質問していました。 どうやらMainIndexの「最近のコメント」の部分がうまく行かないところまでは分かったのですが 困っていたら、BananaBlogのうっちーさんが教えてくださいました。 Weblog改造日記その4〓 文字コードとデ...
Weblog: Cerblog
Date: 2004年04月22日 18:49
Title: 最近付いたコメントを表示
Excerpt: ここ何日か、本を参考にして最近付いたコメントを表示できるよう、テンプレートを弄ってたんだけど、MTEntriesで recently_commented_on使うと、再構築できてもコメントが表示されないという状況。 エラーメッセージでググってみて、 BananaBlog: Weblog改造日記その4〓 ...
Weblog: Soukaku's Hena-Choko Blog
Date: 2004年04月28日 09:40
Title: 移転先をお試し中
Excerpt: 移転を検討中です。ここでも書いたような理由から移転先を探して10日間無料体験中で...
Weblog: 半兵衛の徒然記mt
Date: 2004年09月28日 01:19
Title: 最近付いたコメントを表示
Excerpt: ここ何日か、本を参考に、最近付いたコメントを表示できるよう、テンプレートを弄って...
Weblog: Soukaku's HENA-CHOKO Blog
Date: 2005年01月11日 04:39
Title: MT再構築エラーの回避
Excerpt: MTの再構築エラーの件ですが、 どうやらデータベースに問題があったようです。 Berkeley DBよりもMySQLのほうが相性がいいらしく、 スクール...
Weblog: ドイツ駐在員妻、月10万円を目指してアフィリエイト!
Date: 2006年01月08日 17:51