2013-01-07 58 views
3

使用CakePHP的AuthComponent時出現一個奇怪的錯誤。據我所知,代碼本身沒有任何問題。它在我的開發機器和生產服務器上運行良好。但是,如果我將app/Core/config.php中的「調試」級別從生產服務器上的2(開發)更改爲0(生產),則應用程序將失敗,但在錯誤日誌中只有這一項:AuthComponent在開發模式下工作良好,但在生產中不起作用?

PHP Fatal error: Class 'AuthComponent' not found in /path/to/my/app/View/Elements/auth_status.ctp on line 3

我已檢查該文件是否存在於lib/Cake/Controller/Component/AuthComponent.php中。我也試驗性地將App::uses('AuthComponent', 'Controller/Component')添加到AppController和我的個人控制器中,但無濟於事。這一個讓我難住,我不能在我的開發機器上重現錯誤。這似乎表明服務器問題,但我無法找到解釋,並且文檔不清楚運行AuthComponent所需的先決條件。任何想法如何解決它?謝謝!

供參考,這是我的AppController:

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(); 
    } 
} 

爲auth_status.ctp代碼:

 <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文件上面使用了聲明本身,或者您獲得的$ components聲明應該就足夠了。這很奇怪。它是一個錯誤頁面,你在嗎?或正常的200頁? – mark

回答

3

我終於到了這一個的底部。在core.php中,有一個名爲$ prefix的變量被緩存引擎使用。如果該引擎是Memcache或APC,則必須更改該引擎以避免與服務器上運行的任何其他Cake應用程序發生衝突。我的開發筆記本電腦使用文件緩存引擎,而生產服務器使用APC(以及後來的Memcached)。同一個Cake應用程序的舊版本在該服務器上運行,使用AuthComponent時爲而不是。只要有人在該應用程序上發出請求,另一個應用程序就會使用錯誤的緩存並拋出HTTP500錯誤,直到我清除緩存爲止。

將$ prefix變量更改爲您的應用程序獨有的內容,問題就消失了。

0

你可能有關於include_path不同php.ini設置。

檢查的開發和生產服務器上:

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中加載插件,但沒有它安裝

相關問題