AuthComponent在开发模式下工作得很好,但在生产模式下就不行了


AuthComponent works great in development mode, but not in production?

当使用CakePHP的AuthComponent时,我得到了一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行得很好。但是,如果我将app/Core/config.php中的"调试"级别从2(开发)更改为0(生产),则应用程序在错误日志中失败,除了以下内容:

PHP致命错误:类'AuthComponent'找不到/path/to/my/app/View/Elements/auth_status。CTP在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>

我终于弄清了这件事的真相。在core.php中,有一个名为$prefix的变量供缓存引擎使用。如果该引擎是Memcache或APC,则必须更改它以避免与服务器上运行的任何其他Cake应用程序的命名冲突。我的开发笔记本电脑使用的是文件缓存引擎,而生产服务器使用的是APC(后来是Memcached)。同一个Cake应用的旧版本正在该服务器上运行,并且使用的是而不是 AuthComponent。一旦有人在该应用程序上发出请求,其他应用程序就会使用错误的缓存并抛出HTTP500错误,直到我清除缓存。

将$prefix变量更改为应用程序的唯一变量,问题就会消失。

您的php.ini设置可能与include_path不同。

检查开发服务器和生产服务器:

echo ini_get('include_path');

我认为这可能与这个问题有关。我代码中的错误与AuthComponent(或Cake)完全无关。

不幸的是,我不知道你的错误是什么——在我确定我的错误之前,我必须进行一些真正的调试。

如果有人好奇;我的错误是,我访问函数作为数组和我的生产服务器正在运行PHP版本<5.4 .

我也遇到了这个问题,因为它证明我的问题是,我试图加载一个插件在bootstrap.php,但没有安装它