2012-04-11 6 views
2

내 회사의 DBA는 장기간 실행되는 데이터베이스 연결과 프로덕션 데이터베이스에 대한 쿼리를 자동으로 종료하는 스크립트를 가지고 있습니다. 필자는 주기적으로 데이터베이스 읽기 및 쓰기를 수행해야하는 루프와 같은 종류의 데몬과 같은 CakePHP 쉘 응용 프로그램을 작성했습니다. 너무 오래 실행하면 데이터베이스 연결이 유지 보수 스크립트에 의해 닫히고 내 응용 프로그램 오류가 발생합니다.모델을 인스턴스화 할 때 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

에 나열되어 있습니다.

나는 당신이 당신의 연결을 죽일 afterFindafterSafe를 사용해서 데이터베이스에 연결을 beforeFindbeforeSafe을 사용할 수 있다는 추측에는 요.

핵심적인 Cake 기능을 사용하여 데이터베이스 연결을 열고 닫는 '올바른'방법은 확실하지 않지만 Costa의 대답은 좋은 계획처럼 보입니다.

(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

콜백 사용에 대해서는 생각하지 않았습니다. 나는 Costa의 제안을 사용하여 끝내었고 충분히 잘 작동하지만 콜백은 오랫동안 차단할 수있는 함수를 호출 할 때마다 수동으로 connect/disconnect를 호출하는 것보다 더 깔끔할 수 있습니다. – ThisSuitIsBlackNot

+0

당신의 주어진 링크가 작동하지 않습니다 – Sadikhasan

+1

제 대답은 거의 3 년이되었고 cakephp 웹 사이트는 그동안 링크 구조를 변경했기 때문입니다. 이것은 실제로 건설적인 것은 아닙니다 (더하기 : 현재 주소를 찾고 직접 게시물을 업데이트 할 수 있습니다 ...) – Joep

관련 문제