結局色々書き換えリファー取ってるrefererDbiIO.rbが@dbhを再利用しないので再利用する様に書き換えてみたり、counter.rbがカウンターファイルをぶち壊しそうなので排他ロックを取るようにしてみたり。疲れたよ......。データベースバックアップ時の問題と解決策tDiaryをMySQLで走らせられる事は成功した。いうことは、データベース(MySQL)のバックアップを取る必要があるという事だ。方法はあるが、基本は、MySQLを止めて、ファイルをコピー。厳密にはrsyncだが。止めている間の処理が問題になる。Errorになってしまう。言うわけで、データベースバックアップの為の停止時間中は、ごめんメンテ(バックアップ)中。30秒ほど待ってリロードしてね!という文字を返す様にtDiaryをいじる。Exception」の行の前にこんな感じのを追加した。"ごめんメンテ(バックアップ)中。#{e.errstr}"end何をやっているのかというと、DBI::DatabaseErrorが来た時(データベース関連のエラーが来た時)に、err番号が2003の時には「ごめんメンテ(バックアップ)中。30秒ほど待ってリロードしてね!」と表示して、それ以外の時にはExceptionとほぼ同じものを表示するというプログラム。普通はそれで動くと思っていたのだが......罠が。うちの設定ではセキュリティを重視するために、net.inet.tcp.blackhole=2とやって、知らないパケットをシカトする設定にしている。何が起きるかというと、rubyのDBIでconnectを呼び出すと、synを送って......待つ。例外投げてよ!!(笑)TCPの3hand-shake失敗したら500になるのかよ!!......というか、これは困った。最初に考えた案として、mysqlと同じポートに「コネクションを受け付けない」サーバを一時的に(バックアップ中のみ)立ち上げれば良いんじゃないかというアイディア。これはmysqlを再起動する時に悪さをする可能性がある。うーん、なんか良い方法無いかなぁ......と思い、「結局はrstパケットなりポート到達不能パケットなり、エラーだぜ!ってパケットを返せば良いんだよね~」と思い立つ(笑)どうやるか。ipfwの機能として、rejectパケットを捨てます。(ファイアウォールより)こんなのがある。ipfwは標準動作(?)ではipfwのindex値(エントリー番号?)は100から始まる。lo0として、OSレベルで弾く設定をする。10とすれば、またアクセスできるようになる。これでめでたく(?)mysqlが止まっている30秒間だけは、mysqlにアクセスしようとするとrejectされて、例外が投げられ、無事(?)「ごめんメンテ(バックアップ)中。30秒ほど待ってリロードしてね!」という画面になる(笑)あー、なんでこんな微妙な所をいじってるんだろう、ワシは(笑)その30秒間にアクセスに来る人間なんて......いるのか!?(笑)欠点:サーチエンジンが「偶然」その30秒間にクロールをかますと、非常に面白い結果になると思われる(笑)追記:→回避策ちゃんとHTTPのステータスコードをエラーで返せば良いんじゃないかと思いつく。ヘッダを含むべきです。ほげほげ\nって出力するとそのエラーコードになる模様。503を返す様に変更。わかんねー!(笑)telnetで直接叩く。おぉ、ホントだ503って返ってきてる。ログにも503って残った。Firefoxに脆弱性、投稿サイト使い悪用の恐れまたか!つか、「Mozillaベースブラウザ」つったらSeamonkeyも含まれるんだろうなぁ。boat.」そういえばおとボクオンリーと同じ日で同じ会場ですな。暇があったら行ってこよう。Days)・2位芙蓉楓(SHUFFLE!)・3位竜宮レナ(ひぐらしのなく頃に)&我妻由乃(未来日記)さすがは言葉さま。ハルナドなかなか良かったので紹介。スナップショットLVなんか「Linuxでスナップショット取れないの?」という話から見つけたのでメモっておく。xfs+lvm前提っぽいので注意。今こそ声を大にして、思っている事を言うのだ。