2003-08-04 [長年日記]

_ [Travel] 避暑へ

京都もいよいよ夏まっさかりになってきました。 というわけで、今週の後半は信州の方に避暑に行く予定です。おほほほほ (?)

このエントリーを含むはてなブックマーク 

_ [tDiary] HEAD アクセスの激速化

第二で、HEAD アクセス時にそもそも CGI をアクセスせずに更新時刻を返すようにしてみました。以下の記述は第二 tdiary.net 用の設定ですが、適宜読み変えて参考にしてください。

まず httpd 実行 uid で writable な /home/tdiary/antenna というディレクトリを作ります。

次に、以下のようなプラグインを置きます。

#
# record update time
#
antenna_dir = '/home/tdiary/antenna'
if /^(comment|append|replace|trackbackreceive)$/ =~ @mode then
    begin
        if /^([^.]*)\.tdiary\.net$/i =~ ENV['HTTP_HOST'] then
            File.new("#{antenna_dir}/#{$1}", 'w').close
        end
    rescue
    end
end

そして、.htaccess なり httpd.conf なりで次のように rewrite します。

RewriteCond %{REQUEST_METHOD}       HEAD
RewriteRule ^([^.]+)\.tdiary\.net.* /home/tdiary/antenna/$1 [L]

ちなみに、最新日記ではなく過去の日記あてにアンテナと思われる HEAD アクセスがあるのですが、上記の例だと問答無用で最新日記の last_modified を返してしまいます。個人的には「仕様です」でいいと思いますが、いまのところは YYYYMMDD.html あての HEAD アクセスは cgi を呼ぶようにしています。

なお、最初の導入時に、あらかじめ全ての日記について上記のようなファイルを用意しておかないと、導入後に更新するまで 404 が返ってしまいますので、www.tdiary.net で配布している tdiary.lirs を元に以下のスクリプトで一括作成しました。

#!/usr/bin/env ruby
data_dir='/home/tdiary/data'
antenna_dir='/home/tdiary/antenna'

if (ARGV.size != 1) then
    puts "USAGE: touch_antenna.rb tdiary.lirs"
    exit(1)
end

diaries = Dir.glob("#{data_dir}/*").collect{|x| File.basename(x)}

f = File.new(ARGV[0])
while (line = f.gets)
    next unless %r|^LIRS,([^,]*),[^,]*,[^,]*,[^,]*,http://([^.]+)\.tdiary\.net/,| =~ line
    next unless diaries.include?($2)
    mtime = Time.at($1.to_i)
    user = $2
    File.new("#{antenna_dir}/#{user}", "w")
    File.utime(0,mtime,"#{antenna_dir}/#{user}")
    puts user
end
このエントリーを含むはてなブックマーク 
本日のツッコミ(全4件) [ツッコミを入れる]
_ きた (2003-08-04 14:50)

お,信州.新幹線ならうちまで1時間かからんよ.<br>「遊びに来なさい」と言いたいところだけど,ヨメが試験勉強中だからなぁ…

_ zunda (2003-08-04 17:01)

いーなー > 避暑<br>File.newしたファイル、明示的に閉じた方がいいかもですね<br>空のブロックをおくかFile.new(...).closeする?

_ きた (2003-08-04 17:38)

@modeにtrackbackreceiveも入れてねーん.

_ かずひこ (2003-08-04 18:40)

ご指摘ありがとうございます。そのように修正しました>zunda さん、きたさん。

[]

トップ «前の日記(2003-08-03) 最新 次の日記(2003-08-05)»