2012-04-11 1 views
2

私の会社のDBAには、長時間実行されているデータベース接続と本番データベースのクエリを自動的に停止するスクリプトがあります。私はループで動作するCakePHP Shellアプリケーションを作成しました。デーモンのようなもので、定期的にデータベースの読み書きを行う必要があります。長時間実行すると、データベース接続が保守スクリプトによって閉じられ、アプリケーションのエラーが発生します。モデルのインスタンス化時にCakePHPがデータベースに自動的に接続するのを防ぐ

CakePHPソースを見ると、モデルがインスタンス化されると、自動的に適切なデータベースに接続しようとしているようです。クエリを作成するときにのみデータベースに接続して切断する方法はありますか?

+0

私がコアに触れることなくこれを行うためのクリーンな方法があるとは思わない、私はそれについて考えますと、おそらく朝に答えを出すかもしれない。しかし、IMHOのDBAポリシーは意味をなさない、あなたは彼らがそれを行う理由を知っていますか? – luchomolina

+1

CakePHPでやりたいことを達成するためのきれいな方法があるかもしれませんが、私は@luchomolinaに同意する必要があります。それはポリシーか、シェルが絶え間なく実行されているかのどちらかです。シェルスクリプトを定期的に(cronジョブとして)実行することはできませんか? 私はこのコメントがあなたの問題を解決しないことを知っています(これは私が以下に有用な答えを出そうとした理由です)。 – Joep

答えて

4

必要に応じて手動で接続/切断できますか?

DboSourceには多くの方法があります。ここでは有用である可能性がある機能のリストです:

$db = ConnectionManager::getDataSource('local'); 

$isconnected = $db->isConnected(); //is the connection open? 
$db->close(); //close the connection 
$db->reconnect(); //reconnect to the db 

詳しい方法は、たぶん、あなたはこのためのAppModelにコールバックを使用することができDboSource API docs

+0

これは私がやったことです。同様の質問と回答を見てください:http://stackoverflow.com/questions/5118519/cakephp-reconnect-to-db – ThisSuitIsBlackNot

2

に記載されています。

私は、データベースへの接続を行うためにbeforeFindbeforeSafeを使用して、接続を殺すためにafterFindafterSafeを使用することができることを推測すると思います。

コアケーキ機能を使用してデータベース接続を開閉する「正しい」方法については、コスタの答えは良い(とクリーンな)計画のように思えます。

(1)http://book.cakephp.org/1.3/en/view/922/Database-Configuration(リンクは動作を停止し、あなたが今ここを見て必要がありますね:http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Configuration.html)を

+0

私はコールバックの使用については考えていませんでした。私はコスタの提案を使用して終了し、それは十分に機能しますが、長い時間ブロックする可能性がある関数を呼び出すたびにコールバックはconnect/disconnectを手動で呼び出すよりもきれいかもしれません。 – ThisSuitIsBlackNot

+0

あなたの指定されたリンクが動作していません – Sadikhasan

+1

私の答えはほぼ3歳で、cakephpのウェブサイトはその間にリンク構造が変更されている可能性があります。これは本当に建設的なものではありません(プラス:あなたは現在の住所を探して自分で投稿を更新できました...) – Joep

関連する問題