ようやく機能的にはほぼ完成して、あとはエラー時のログをファイルに出力するコーディングを入れようとしていた矢先。
開発は FreeBSD7.2 で行っていた。しばらく portupgrade もしていない共用マシンであった。私のローカルな環境はは Ubuntu 仕様になっていて、裏には FreeBSD6.4 という古いものがデュアルで入っていた。OS のバージョンを上げるのがめんどくさくて、FreeBSD で開発するときは共用サーバを使っていた。
それはそれとして、本番環境ではこのアプリ専用のサーバが用意される。それには FreeBSD8.0 を入れる予定なので、えいやっと自分のローカル環境を FreeBSD8.0 にあげて、最新版のモジュールをがしがしと ports やら CPAN で入れて、アプリを起動しようとすると、
動かん。
私が開発しているプラットフォームである Catalyst(MVCモデルの Perl のフレームワーク)のエンジンが昨年に全面的に修正され、MOOSEベースとなって、その影響があちこちにあるらしい。今後は Plugin をできるだけ使わない方向で Catalyst の開発は進めて行くべきである、とメインのデベロッパーの著書にも書いてある。安易に Plugin を作ると、名前空間が同一なのでメソッド名がコンフリクトを起こしたりするからだそうだ。
んでもって、最初のエラーはいきなり「画面が真っ白」。簡易サーバのログを見ると、レンダリングのところで wide character がどうたらこうたら、と書いてある。どうやらマルチバイト文字関連で引っかかっているようだ。
ググると出てくる出てくる。MOOSEベースになって、というよりマルチバイト文字の扱いがいろいろ変わってしまっているようだ。UTF-8を使うときには、いろいろと作法が必要になった。メモがわりにここに書いておこう。
・Catalyst::Plugin::Unicode を追加
・Configに ForceUTF8 を設定
・View を Catalyst::View:TT から Catalyst::View::TT::ForceUTF8 に変更
試行錯誤して、いろんなところが文字化けしているのが少しずつ正常に表示されるようになってきた。が、まだ一部文字化けがある。DBから取り出した、あるいはフォームから渡されたファイル名を含む文字列を flash で View に渡してレンダリングすると、ファイル名の部分だけ文字化けする。なんでだ?普通に stash に入れて渡すと正常に表示されるのに。
続きはまた明日。