2006年11月19日(日) [長年日記]
- 溜まっていたRSSフィードを久しぶりに読み切った!
- デスクトップPCを久しぶりに液晶テレビに繋いだが映らない。仕方なく専用ディスプレイに繋いだが、こちらでも映らない。なにー。壊れたのか?
■ [tdiary] tDiaryをスナップショット版(2.1.4.20061110)へ
makerss.rbは最近バージョンアップしているようなので、tDiary全体をバージョンアップしてみた。ちょっとメモ。
- jdate.rbはtdiary-contrib.tar.gz内にある。
- refedit.rbはtdiary-contrib.tar.gz内にも無い。
- misc/plugin/mimetex.rbを移行すること。mimetex.xgiに実行権限を付与すること。
- category.rbを修正すること。
前回と同じ。
(追記)
linkcheck.rbも導入しないと。これはtdiary-contrib.tar.gz内にある。
■ [tdiary] RSSが指すURLが変 (2)
トラックバックを受けるとRSSファイル内のリンクのベースURLが http://ogawa.s18.xrea.com/tdiary/tb.cgi/ になってしまう。tDiaryを最新版にしても再現した。原因を調べたのでメモ。
別環境で試す
調査は別の環境で行おうとしたが、そちらでは再現しなかった。トラックバックを受けてもRSSのベースURLはおかしくならない。XREA固有の現象なのかも。
makerss.rbを読む
RSS内のベースURLは、makerss.rbのmakerss_update内にある
uri = @conf.index.dup uri[0, 0] = @conf.base_url if %r|^https?://|i !~ @conf.index uri.gsub!( %r|/\./|, '/' )
というコードで決まっているようだ。@conf.indexは設定ファイルで指定する@indexのことだろう。これの設定値は'./'になっていた。そすると、ベースURLには@conf.base_urlの値が使われることになりそう。
@conf.base_urlとは
@conf.base_urlはtdiary.rb内の
def base_url return '' unless @cgi.script_name if @cgi.https? port = (@cgi.server_port == 443) ? '' : ':' + @cgi.server_port.to_s "https://#{ @cgi.server_name }#{ port }#{File::dirname(@cgi.script_name)}/" else port = (@cgi.server_port == 80) ? '' : ':' + @cgi.server_port.to_s "http://#{ @cgi.server_name }#{ port }#{File::dirname(@cgi.script_name)}/" end.sub(%r|/+$|, '/') end
という所で決まっているみたい。ということは、@cgi.script_nameがおかしいということになる。@cgi.script_nameはhttpdから渡される環境変数SCRIPT_NAMEそのものだ。
SCRIPT_NAMEを調べる
次のスクリプトでSCRIPT_NAME(とついでにPATH_INFO)の値を調べてみた。
#!/bin/sh echo Content-type: text/plain echo echo SCRIPT_NAME=$SCRIPT_NAME echo PATH_INFO=$PATH_INFO
http://ogawa.s18.xrea.com/misc/env.cgi/aaa/bbb にアクセスするとSCRIPT_NAMEの値は「/misc/env.cgi/aaa/bbb」になってしまう。これだ。ここは「/misc/env.cgi」になるのが正しい。つまりXREAが悪いということのようだ。
検索するとCgi プログラムへ渡される環境変数についてというスレッドが見つかった。2002年の投稿だが、本サーバでもここに書かれているのと同じ挙動を示し、状況は変わっていないようだ。
- http://ogawa.s18.xrea.com/misc/env.xcg/aaa/bbb → SCRIPT_NAME=/misc/env.xcg/aaa/bbb
- http://ogawa.s18.xrea.com/misc/x/env.cgi/aaa/bbb → SCRIPT_NAME=/misc/x/env.cgi
対策
原因は分かった。実現したいのはトラックバックを受けてもRSSファイルのベースURLがおかしくならないようにすることだ。最初のコードを見ると、@conf.index.dupがhttp://で始まっていれば@conf.base_urlが使われなくなるのでSCRIPT_NAMEの影響を受けなくなるはず。だから、tDiaryの設定ファイルに
@index = 'http://ogawa.s18.xrea.com/tdiary/'
と記述すればいいのではないか。
記述してみた。これでトラックバックを受けても大丈夫なようになった模様。
■ やること
- デザイン変更
- 保険
- 健康診断
- 蛍光灯