0

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

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

有时我们会收到错误,这是由于问题造成的,蛋糕内部决定从另一个应用程序文件夹中调用代码。因此,我们从 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 之后,一切都很好了。

关于在子文件夹托管方案中使用 cakephp,cakephp2 是否有任何变化?

4

1 回答 1

6

您启用了 APC,从而导致 Cake 默认使用 APC 作为缓存引擎。目前,您尚未更改 app/Config/core.php 中用于缓存配置的 $prefix,从而导致两个应用程序使用相同的设置。将它们更改为唯一值,您的问题将得到解决。

于 2012-08-17T14:36:32.287 回答