Sat, 11 Feb 2006

pyblosxom on lighttpd

先日、ここのpyblosxom 1.3.1にupdateした訳ですが、ついでにローカル用に Windows/Cygwin/lighttpd上で使ってる のもupdateしてみた。

そしたらなんか以前のエントリに行こうと思ってもそんなファイル存在しませんって アクセスできなくなっちゃった。(こんなの → http://sh1.2-d.jp/b/2006/Feb/10) あれー? 1.3.1に挙げたからか?と思って試しにこのサイトでも試してみたけど 問題なくアクセスできる。

config.pyに下記の一文を追加してやるとdebugモードで動作して、内部変数の値がブラウザ上で見ることができるようになる。

py['renderer']="debug"

その結果は、こんな感じ。

# lighttpdの結果から抜粋
pi_bl -> /2006/feb/10
pi_da ->
pi_mo ->
pi_yr -> 2006

pi_moやpi_daにはそれぞれ月と日の情報が入るはずだが入ってない。 試しに今度はapacheで試してみた。

# apacheの結果から抜粋
pi_bl -> /2006/Feb/09
pi_da -> 09
pi_mo -> Feb
pi_yr -> 2006

pi_blの月情報の表記の仕方が feb Feb で違ってた。

調べてみた結果、pyblosxomでは内部で "Jan", "Feb".. 等の情報を Pyblosxom.tools.MONTHSに持ってて、受け取ったパス情報が一致するか どうかを見ているため、大文字小文字の違いにより一致せず表示されなかった ようだ。

lighttpdでは内部で大文字を小文字に変換してしまうのかな? 教えてエライ人

なので下記のように修正してやることで、apacheでもlighttpdでも無事に 動作するようになりました。これって多分1.3.1になったから出た問題って わけじゃないだろうな。一応MLにpatch送ってみたけどどうかな。

$ diff -u pyblosxom.py.org pyblosxom.py
--- pyblosxom.py.org    2006-02-11 17:02:54.343750000 +0900
+++ pyblosxom.py        2006-02-11 17:05:07.203125000 +0900
@@ -1108,7 +1108,7 @@
                     item = ""

                     if (len(path_info) > 0):
-                        item = path_info.pop(0)
+                        item = path_info.pop(0).capitalize()
                         # handle a month token
                         if item in tools.MONTHS:
                             data['pi_mo'] = item

うくく (← ぱくりです。一回言ってみたかったのだ)