2014-01-29 2 views
0

Heroku PHP 빌드 팩 (https://github.com/heroku/heroku-buildpack-php)을 사용하여 Heroku에서 CakePHP 응용 프로그램을 설정했습니다.디버그가 0으로 설정된 경우 Heroku에서 CakePHP 오류가 발생합니다.

디버그를 1로 설정하면 응용 프로그램에서 파일 캐시를 사용하고 캐시의 수명을 단축합니다. 또한 DebugKit 도구 모음이 나타납니다.

디버그를 0으로 설정하면 응용 프로그램에서 APC를 사용합니다.

디버그를 1로 설정하면 제대로 작동하지만 DebugKit 도구 모음이 나타나고 캐싱이 본질적으로 차단됩니다. Debug = 0으로 설정하면 표준 "내부 오류"메시지가 나타납니다. "heroku logs"를 실행하면 php가 tmp 디렉토리 (특히 오류 로그 용)에 쓸 수 없다는 오류 만 표시됩니다. cakePHP를 stdout에 쓰려고했지만 그게 도움이되지 못했습니다.

정확히 어떤 문제가 발생했는지 보려면 DebugKit을 설치에서 제거하고 Debug = 1 match Debug = 0에 대한 캐싱을 수행하십시오. 이 오류로 앱이 다시 오류가 발생할 것으로 생각했지만 여전히 작동 중입니다. 디버그가 꺼져 있거나이 오류의 원인이 될 수있는 다른 현상이 있습니까? 아니면 오류 로그 오류로 인해 놓친 부분이 있습니까?

답변

4

나는 결국이 작업을 할 수있었습니다. 대답은 buildpack이 app/tmp 디렉토리와 모든 하위 디렉토리를 작성했는지 확인하는 것이 었습니다. 나는 cakePHP가 그들을 필요로하지 않는다면 그들에 대해 걱정하지 않을 것이라는 인상하에 있었지만, 나는 틀렸다.

는 내가 추가 한 buildpack 컴파일 파일 있도록 REPO에서 그들을 유지하기 위해 원 : 그와

CAKEPHP_APP_TMP_PATH="www/app/tmp" 

# make tmp dir 
echo "-----> Creating CakePHP tmp directories" 
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/models 
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/persistent 
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/views 
mkdir -p $CAKEPHP_APP_TMP_PATH/logs 
mkdir -p $CAKEPHP_APP_TMP_PATH/sessions 
mkdir -p $CAKEPHP_APP_TMP_PATH/tests 
chmod -R 777 $CAKEPHP_APP_TMP_PATH 

, 디렉토리는 장소에 있었지만, 그들은 사용할 수 나타나지 않습니다. 응용 프로그램이 디버그가 0으로 설정된 상태에서 제대로 실행 중입니다.

1

로그를 볼 수 있도록 tmp 폴더에 대한 쓰기 권한을 얻을 수 있다면 이상적입니다.

이러한 내부 오류는 일반적으로 모델 캐싱과 관련이 있습니다. 따라서 APC에는 데이터베이스와 실제로 일치하지 않는 오래된 캐시가있을 수 있습니다.

APC 캐시를 지우고 도움이되는지 확인해보십시오.

추신 : 케이크 응용 프로그램에는 몇 가지 캐시가 있으므로 무엇을 사용하는지 확인해야합니다 ... default, _cake_core__cake_model_ 이상이 있어야합니다! 마지막 두 가지는 문제의 원인 일 수 있습니다.

+0

고마워요! 나는 Heroku에 익숙하지 않지만 읽기 전용 앱 디렉토리라는 언급을 계속 볼 수 있습니다. buildpack에 chmod 또는 chown을 추가 할 수 있으므로 tmp 디렉토리를 수정 해 보겠습니다. 나는 결과를 조금 올릴 것이다. – ajveach

+0

그래서이 시점에서 buildpack에 tmp 디렉토리의 사용 권한, 소유권 및 사용법을 변경하는 줄을 추가하려고 시도했습니다. 헤로쿠는 퍼미션이나 소유권을 변경시키지 않을 것입니다. (또는 적어도 빌드 팩의 시도는 작동하지 않습니다.) 케이크를 다른 위치에 쓰는 방법을 알아낼 수 없습니다. 나는이 게시물 (http://stackoverflow.com/questions/16717420/how-can-i-access-cakephp-log-files-on-heroku)을 기반으로 stdout 및 stderr에 로그를 보내려고했지만 행운도 없었다. . 또한 다른 설정을 살펴 보았고 둘 다 "Apc"로 정의 된 "$ engine"으로 설정되었습니다. – ajveach

+0

앱이 그 결과를 어떻게 지속합니까? 그리고 쓰기 권한이 없다면 디버그 1에서 응용 프로그램이 ** file ** 캐시를 사용하고 어떻게 작동하는지 ...? –

관련 문제