TOPに戻る
鬱るんです
躁鬱病のITエンジニア「はまー」が心と体の模様を記した雑記帳。 大手IT企業で心身ともにぼろぼろになり退職した後、ほそぼそと働いたり事業を立ち上げようとして頓挫したり、作業所に通ったり障害者雇用で働いたりと紆余曲折したが、今は無職な毎日。

日別アーカイブ:2010年1月12日

いかん。文字化けだけでなく、画面が真っ白になってしてしまった。

今日も帰りが遅くなってしまった理由の一つなのだが、最新のサーバ環境でアプリが動かないのである。Catalystのアプリが動かない。どうやら Catalystのバージョンだけでなく、Perl自体のバージョンが関係しているらしい。どうにもこうにも、UTF-8の扱いがうまくいかない。いや、これは開発機のバージョンが古かったというわけでなく、先日「これは便利」と思って使ったモジュールが悪さをしているような感じがする。

そのモジュールとは、Catalyst::Plugin::FillInForm::ForceUTF8というものである。HTML::FillInForm という便利なモジュールをCatalystのPluginにしたCatalyst::Plugin::FillInFormを、更にUTF-8対応させたモジュールである。こいつは、FormValidatorとセットで使うのだが、その機能とは、まずこいつをuseしておき、CatalystのRootコントローラのEndアクションの中でViewをレンダリングした後に、おまじないを書いておく、という使い方をする。(レンダリングした後に、というのが少し不思議)

そしてその機能とは、フォームから受け取った値をFormValidatorでバリデーションすると、エラーがあってもう一度入力フォームを表示させたときに、inputタグの中に明示的にvalueをセットしなくても、前の画面の値を自動的にセットしてくれる、という便利なものである。これを使う前はTT(Template Toolkit)の機能を利用して、動的に一つずつ埋め込んでいたのだ。

本番機と同じ環境でアプリを動かしたら文字化けしまくって、調べたらPerlの5.8からはUTF-8を内部的に使うようになっていて、その関係でいろいろ調べているうちに偶然見つけて、こりゃ便利と思って使ったのがこのモジュールである。しかし、こいつを使い出したら文字化けするのではなく、画面が真白で表示されなくなった。サーバがエラーを吐いている。「Wide character が云々」と、Catalyst::Engine の中で落ちているのだ。レンダリングに失敗している。”ForceUTF8″という名前なのに、なぜだ?

まあ、元のやり方に戻せば解決するとは思っているのだが、なんか悔しい。なんかいい方法ないかな。こいつを更に継承したクラスでも作るか。とかなんとか今また調べていたら、新たな情報を発見。どうやらこのForceUTF8版は古いようだ。今はPerl自体がUTF-8対応しているので、Catalyst::Plugin::Unicodeをuseして、Catalyst::Plugin::FillInFormを使えばいいらしい。う~ん、今ただちに試してみたいけど、続きはまた明日。

18時が過ぎたら帰ると決めたのに、なんでこの時間に電車に乗っているのだろう?いつまで経っても自己管理ができない。

相変わらず朝はつらいが、なんとか今週も初日から会社に来ることができている。
それにしても、飯食った直後からこんなに眠いってなんなんだ。