WebAppで DBIをなんらかの方法でDBに接続して、で、リクエストが終わったら接続を解除して・・・とかしたいとするじゃないですか。具体的な実装はScope::Containerでもなんでもいいんですけど。

それでなんかしらんけど、アクセスするたびに三つずつDB接続が残る、という現象に遭遇したわけですよ。最初は普通に「あれ、Scope::Containerの使い方間違ってたか」とか思ってたんですが、何をしてもダメだし、Scope::Containerに手を加えて現在の保持してる変数を抜き出しても何もない。DBI::db へのリファレンスがないのに接続が切れないなんて・・・と途方に暮れることと数時間。

・・・やっちまったよ。ワーカーも同じ設定使うからーってのと、ワーカーはフォークするからーとか考えて適当に入れた次の設定がまずかった

     InactiveDestroy => 1

これ、つまりは$dbhをundefしようがなんだろうが、DBサーバーとの接続が切れないってことなんだね。普通は親プロセスがconnectして、forkした子プロセスがexitしちゃった時についでに$dbhが保持してる接続を解放しないように**子プロセス**で設定するものなんだけど、親でこれを設定してしまうと、永遠にDBへの接続が切れません・・・

なんてこたぁない、俺のやりたかったのは、こちらでした

    AutoInactiveDestory => 1
こっちは、「もし子プロセスを作るなら、自動的にInactiveDestroyを有効にした状態にしろ」っていうことなので、親プロセスは通常通りにundef $dbhで接続が切れる。

あー、あほくさかった。おれの午後を返せ。よい子のみんなは真似しちゃダメだぞ!