调度程序偶尔会从另一个应用调用代码


dispatcher calls code from another app occasionally

我们刚刚将一些应用程序(从 1.3 升级到 cakephp 2.2)并重构了代码。 我们的基本服务器设置看起来像

  • htdocs/subdomain.domain/cakeapp1/...
  • htdocs/subdomain.domain/cakeapp2/...

有时我们会收到错误,这是由于问题造成的,Cake 内部决定从另一个应用程序文件夹中调用代码。 因此,我们从 CakeApp1 调用路由,突然之间,在堆栈跟踪的中间,Cake 从 CakeApp2 调用文件。

因此,尽管 CakeApp1 中没有代码引用"客户端"表,但我们会收到以下错误:

Missing Database Table
Table clients for model Client was not found in datasource default.
Stack Trace
/home/www/subdomain.domain/cakeapp2/lib/Cake/Model/Model.php line 3180 → Model->setSource(string)
/home/www/subdomain.domain/cakeapp2/lib/Cake/Model/Model.php line 2631 → Model->getDataSource()
/home/www/subdomain.domain/cakeapp2/app/Model/AppModel.php line 22 → Model->find(string, array)
/home/www/subdomain.domain/cakeapp2/app/Controller/AppController.php line 237 → AppModel->find(string, array)
/home/www/subdomain.domain/cakeapp2/app/Controller/AppController.php line 41 → AppController->__initializeAppSettings()
[internal function] → AppController->beforeFilter(CakeEvent)
/home/www/subdomain.domain/cakeapp2/lib/Cake/Event/CakeEventManager.php line 246 → call_user_func(array, CakeEvent)
/home/www/subdomain.domain/cakeapp2/lib/Cake/Controller/Controller.php line 670 → CakeEventManager->dispatch(CakeEvent)
/home/www/subdomain.domain/cakeapp2/lib/Cake/Routing/Dispatcher.php line 183 → Controller->startupProcess()
/home/www/subdomain.domain/cakeapp2/lib/Cake/Routing/Dispatcher.php line 161 → Dispatcher->_invoke(UsersController, CakeRequest, CakeResponse)
APP/webroot/index.php line 92 → Dispatcher->dispatch(CakeRequest, CakeResponse)

另一个错误是,找不到插件(调试套件)。 debugkit 嵌入在 CakeApp1 中,但不在 CakeApp2 中使用,所以很明显,在这个应用程序中引发了错误。 错误本身被保存到 CakeApp2/tmp/log/error 中.log - 而不是 cakeapp1,原始代码应该在其中执行。

还有其他人遇到过同样的问题吗? 最大的问题是,并非每个页面视图都会发生错误。 但它可以在不同的浏览器/机器上重现。 调用另一个 URL 并再次重新调用错误的 URL 后,一切又好了。

Cakephp2 中关于在子文件夹托管场景中使用 Cakephp 是否有任何变化?

您启用了 APC,因此默认情况下导致 Cake 使用 APC 作为缓存引擎。目前,您尚未更改用于应用/配置/核心中缓存配置的$prefix.php导致两个应用使用相同的设置。将它们更改为唯一值,您的问题将得到解决。