一部のアプリを (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 を再度呼び出すと、すべてが正常に戻ります。
サブフォルダーのホスティング シナリオでの cakephp の使用に関して、cakephp2 に変更はありましたか?