中田さん、いとさん
ここ数日、四十の手習いでRubyを勉強しながらtDiaryのコードを追いかけていて、お返事が遅れました。さきほど、中田さん、いとさんがご指摘下さったのと同じ箇所にまで行き当たりました。他にも方法がありそうですが、PATH_INFOに置き換えることで正常作動するところまで確認できたことを、とりあえずご報告いたします。お手数をおかけいたしました。こんな機会でもないとRubyの勉強などしないので自分にとって大変良い機会になりました。ありがとうございます。
福田さん、いとさん
申し訳ありません、
いとさんが言うように tDiary が 引数ではなく REQUEST_URI から date を取得しているのなら、それは AN HTTPD の問題ですね。
AN HTTPD の REQUEST_URI は Apache と違ってエキストラパス(や引数)を落としてしまうからです。
AN HTTPD で tDiary(のトラックバック)を使う場合は、いとさんが言う通り date を取得するところの REQUEST_URI を PATH_INFO に変える必要があります。
なお、そこを PATH_INFO に変えても、それはそのまま Apache でも使えます。
福田さん
# Rubyのソースは見てもさっぱりなのですが。。
tdiary.rb の中の
date = ENV['REQUEST_URI'].scan(%r!/(\d{4})(\d\d)(\d\d)!)[0]
という行を
date = ENV['PATH_INFO'].scan(%r!/(\d{4})(\d\d)(\d\d)!)[0]
に変更するとどうでしょうか。
福田さん、
福田さんの「分析」では、
>tb.rbの引数として"20051129"を"?tag="などを使って渡すのではなく"/"を使って渡します
というのが間違っています。
それは「引数」を渡しているのではなく CGIでいうところの「エキストラパス」なので、「引数」は nil なのが正しい動作です。
http://example.com/tdiary/tb.rb/20051129 という場合は、環境変数 PATH_INFO に "/20051129" がセットされます。
ruby で言えば、cgi = CGI.new で cgi.path_info に "/20051129" が入ります。
もちろん、tb.rb を作った人はこのことはわかっているはずなので、おそらく福田さんの tDiary(かそのプラグイン)の使い方がおかしいのだと思います。
福田さん
http://example.com/tdiary/tb.rb/20051129
であれば、環境変数 PATH_INFOで "/20051129" が取得できるので
そこから年月日を取り出して使うように tb.rbを書き換えれば
可能ではと思うのですが。
いつもお世話になっております。
この掲示板上の「福田 健 fkd@is.seisen-u.ac.jp 2005/01/31 09:53」に投稿して以来現在まで、AN HTTPD 1.42nでtDiaryを作動させてきました。このたび事情あって、tDiaryでトラックバックのプラグインを導入して使い始めたのですが、以下のような不具合があることに気がつきました。1)トラックバックの送信は正常にできます。2)トラックバックの受信が不正になります。具体的には以下の通りです。
tDiaryのトラックバック受信URLは、たとえば、
http://example.com/tdiary/tb.rb/20051129
のような形式になります。つまり、tb.rbの引数として"20051129"を"?tag="などを使って渡すのではなく"/"を使って渡します。このトラックバックのURLをAN HTTPに要求しても、AN HTTPからtb.rbには"20051129"という引数が渡されない(nilになる?)ようなのです。その結果、引数を渡されなかったtb.rbは、トラックバックの対象を常に現在時刻のページと仮定してトラックバックを受け付けてしまいます。要するに過去の記事に対してトラックバックができませんし、誤って現在の記事にトラックバックが届いてしまいます。
もしも上記の分析が正しいとすれば、致命的な仕様上の問題に思え、うまい回避策はないようにも思えますが、何かヒントになりそうなものはありますでしょうか。