2012-08-17 48 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