INFOINFO
MAILMAIL

2008年11月17日(月)

* Ubuntu serverテスト中: UTF-8化    [  Linux  ]

 さて、前回のUbuntu serverの導入にともなう、Webコンテンツ周りのUTF-8化だけど、ようやくなんとか終わったかな。もっとも、当初考えていたのとは、違う部分でえらく手がかかったりしたわけだけども(^^;)。

 で、当初、一番手がかかるだろうと思ってたPostgreSQLデータのUTF-8化に関しては、pg_dumpしたファイルをnkf -wで変換して、ENCODING指定をすべてUTF-8に書き換え(sed "s/'EUC_JP'/'UTF-8'/g")てから、psql -fでドカンと読み込ませてやったら、あっさりとUTF-8データに変換できてしまったり。いやぁ、もっと特殊な手段が必要なのかと思ってたんだけどさ。

 んで、その後、Webページのソースの変換にかかったんだけど、こっちはさほど種類も多くないので個別にnkfで変換して、ヘッダのcharsetをUTF-8に書き換えるだけでとくに問題もないだろうと思ってたわけ。実際、ほとんどのページはそれで何とかなったんだけど、いくつかのページ、とくにphpで書いてるページの何箇所かがうまく動作してなくて、それを修正するのに結構手こずったと…(^^;)。

 最初にハマったのはphpでテキストファイルからデータを読み出してる部分で、なぜかオリジナルと動作が異なる。ページをいじったり、テストスクリプト書いて実験してみたら、データが正しく読み出せてない。しかも、なぜかcli版のphpだと問題なく動作したりしてて、余計に悩んでしまったと。
 で、いろいろ調べてみてわかったのは、データの読み出しに使ってた“fgetcsv”の動作がロケール設定に左右されるのが原因ってこと。つまり、LANG=jaの設定での動作を前提にプログラムしていたのが、LANG=Cの状況では実行結果が異なるって話で、どうやらこれまでの環境では偶然(?)上手く動作していたものらしい。
 ま、結局、“fgetcsv”で読み出してた処理を、“fgets+chop+explode”の組み合わせに変更することでロケール設定に左右されないようにしたんだけど、“fgetcsv”がこんなところの設定に影響を受けるなんてのは完全に見落としてたよなぁ(^^;)。

 それから、今回のアップデートのついでに、“Lightbox”を最新の2.04に更新したんだけど(現サーバは2.03.03)、これでもまたハマってみたり。設定自体は間違ってないはずなんだけど、なぜかスクリプトが無反応。散々、あちこちいじってから、ググってみたらこんな情報が。

どうやら若干仕様変更があったみたいですね。Script.aculo.usの読み込みで、今まではeffect.jsのみだったのだけど、今回のv2.04からbuilder.jsも使うようになったみたいです。

 あぁ、道理で今回からbuilder.jsが一つ増えてたわけだ(^^;)。あわててヘッダ部分にbuilder.jsのローディングを追加したらあっさりと動作したわ。うむむ…

 そして最後はデータベース周り。文字コードの変換は↑で終わってたんだけど、実際に動作させて見ると、一部のページで想定した動作をしてない。これも、cli版のテストスクリプトだと上手く動作するのに、Web経由だと上手くいかない系のもの。で、あちこち調べてる最中に、ふと思い出した。UbuntuのApache2の動作アカウントが、いつも使ってるapacheじゃなくてwww-dataになってたことを。
 結局、これが大当たり。現サーバからの持ち込んだデータはすべてアカウントapacheで権限設定してあったので、それをwww-dataに変更してデータベースを再構成したらようやく問題なく動作。しかし、なんでwww-dataなんて変わったアカウント使ってるんだろう、Ubuntuは? だいたい"-"なんて、DBアカウントで普通に使わないと思うんだけどなぁ。セキュリティ絡みの問題なのかなぁ。
 まぁ、あとでよく考えたら、pg_connectでの接続の時にアカウントを明示するっていう手もあったっけとか思ったんだけどね(^^;)。

 ってわけで、思ったよりも時間がかかったものの、なんとか現在稼働しているVine Linuxと同等のシステムをUbuntu serverで構築することはできた感じなので、これでしばらく稼働させて状況を見てみるかなぁ。

Posted by “Lupin” on 2008/11/17 22:24:52
コメント
コメントはありません。
●コメント投稿
このエントリーにはコメント投稿できません。