2012-08-17 49 views
0

我们刚刚将我们的一些应用(从1.3)升级到cakephp 2.2并重构了代码。我们的基本服务器设置看起来像调度员偶尔会从另一个应用调用代码

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

有时我们会收到错误,这是由于问题,该蛋糕内部决定从另一个应用程序文件夹中调用代码。所以,我们从cakeapp1中调用一条路径,突然间,在堆栈跟踪中间,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)未找到。 debugkit被嵌入到cakeapp1中,但没有在cakeapp2中使用,所以很明显,在这个应用程序中引发了一个错误。错误本身被保存到cakeapp2/tmp/log/error.log - 而不是cakeapp1,在那里应该执行原始代码。

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

cakephp2在子文件夹托管方案中使用cakephp有没有变化?

+0

可能与缓存相关?检查使用共享缓存时是否有不同的前缀。 – Ceeram 2012-08-17 11:32:08

+0

@Ceeram:如何更改共享缓存? core.php是完整的香草。 – 2012-08-17 11:54:48

+1

https://github.com/cakephp/cakephp/blob/master/app/Config/core.php#L253 – Ceeram 2012-08-17 12:05:12

回答

6

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

+0

对,这就是他说的;) – Ceeram 2012-08-17 18:23:02

+0

@admad:有没有更合理的有$前缀= md5(ROOT)作为默认值? – 2012-08-20 09:07:39

+0

在2.3版本中,我们只是简单地切换回默认使用文件缓存引擎来避免这些问题。 – ADmad 2012-08-20 13:10:58