2013-01-07 61 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中加载插件,但没有它安装

相关问题