2013-01-07 2 views
3

CakePHP의 AuthComponent를 사용할 때 기괴한 오류가 발생합니다. 제가 말할 수있는 한, 코드 자체에는 아무런 문제가 없습니다. 그것은 내 개발 컴퓨터와 프로덕션 서버에서 잘 작동합니다. 그러나 프로덕션 서버에서 app/Core/config.php의 'debug'수준을 2 (개발)에서 0 (프로덕션)으로 변경하면 오류 로그에 아무것도 표시되지 않고 앱이 실패합니다.AuthComponent는 개발 모드에서 훌륭하게 작동하지만 프로덕션 환경에서는 작동하지 않습니까?

파일이 lib/Cake/Controller/Component/AuthComponent.php에 있는지 확인했습니다. 또한 실험적으로 AppController와 내 개인 컨트롤러에 App::uses('AuthComponent', 'Controller/Component')을 추가/삭제했습니다. 이 하나는 저에게 곤란을 겪었고 개발 기계에서 오류를 재현 할 수 없습니다. 이것은 서버 문제를 나타내는 것으로 보이지만, 설명을 찾기가 어려울뿐 아니라 AuthComponent를 실행하는 데 필요한 전제 조건에 대한 문서가 명확하지 않습니다. 내가 어떻게 고칠 수있는 아이디어? 감사! auth_status.ctp에 대한

class AppController extends Controller { 
    public $helpers = array('Recaptcha.Recaptcha'); 
    public $components = array(
    'Session', 
    'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login' 
     ), 
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ) 
    ) 
); 

    public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(); 
    } 
} 

코드 :

 <div class="pull-right"> 
     <?php if (AuthComponent::user('id')): ?> 
      <?php echo $this->Html->link("Welcome!", '/users/view/'.AuthComponent::user('id'));?> 
      | 
      <?php echo $this->Html->link('Logout', '/users/logout');?> 
     <?php else: ?> 
      <?php echo $this->Html->link('Login', '/users/login');?> 
      | 
      <?php echo $this->Html->link('Register', '/users/register');?> 
     <?php endif; ?> 
     </div> 
+0

당신의 요소에 코드가 무엇을 설치하지 않았다? – mark

+0

코드로 내 질문을 편집했습니다. 건배 – elliot

+0

응용 프로그램이 appcontroller 파일 위의 명령문 자체를 사용하거나 $ 구성 요소 선언을 사용하면 충분합니다. 그건 아주 이상 해요. 오류 페이지입니까? 또는 정상 200 페이지? – mark

답변

3

마침내이 하나의 바닥에 도착했습니다. core.php에는 캐시 엔진에서 사용되는 $ prefix라는 변수가 있습니다. 해당 엔진이 Memcache 또는 APC 인 경우 서버에서 실행중인 다른 Cake 응용 프로그램과 이름 충돌을 피하기 위해 변경해야합니다. 내 개발 노트북은 파일 캐시 엔진을 사용하고 프로덕션 서버는 APC (그리고 나중에 Memcached)를 사용했습니다. 동일한 Cake 응용 프로그램의 이전 버전이 해당 서버에서 실행 중이며 이 아니고 AuthComponent를 사용하는입니다. 누군가가 해당 앱에 대한 요청을하면, 다른 앱은 캐시를 지울 때까지 잘못된 캐시를 사용하고 HTTP500 오류를 throw합니다.

$ prefix 변수를 앱 고유의 것으로 변경하면 문제가 사라집니다.

0

당신은 아마 include_path에 대한 다른 php.ini 설정을 참고로

, 여기 내 AppController가 있습니다. 개발 및 프로덕션 서버에

확인 :

echo ini_get('include_path'); 
0

나는 이것이 this issue 관련이있을 수 있습니다 생각합니다. 내 코드의 오류는 AuthComponent (또는 Cake)와 완전히 관련이 없습니다.

불행히도 귀하의 경우에 어떤 오류인지 알 수 없습니다. 오류를 지적하기 전에 실제 디버깅을해야했습니다.

누구든지 궁금한 점이 있다면; 내 오류는 내가 배열로 함수에 액세스했고 프로덕션 서버는 PHP 버전 < 5.4를 실행하고 있었다.

+0

나는 여전히 해결책을 확인하지는 못했지만, [디버그와 생산 모드를 몇 번 반복하면 해결할 것으로 보인다.] (http://stackoverflow.com/questions/14192361/authcomponent-works-great-in-development- 생산 중 모드가 아닌/14553833? iemail = 1 # comment19679432_14192361). 이는 app/tmp/cache 폴더에 대한 문제를 제안 했으므로 프로덕션 서버에 배포 할 때 해당 폴더가 복사되지 않도록했습니다. – elliot

0

나는이 문제에 실행하고 알고 보니 내 문제는 내가 bootstrap.php에서 플러그인을로드하려고 것이었지만,이

관련 문제