【发布时间】:2014-05-28 13:14:33
【问题描述】:
本周我在服务器上移动了一个 CakePHP 应用程序,以便从 C:\path\current\ 提供服务,其中 current 是 C:\path\versions[date] 的符号链接。以前该应用位于 C:\inetpub\wwwroot 中。
因此,每次我部署更改时,我都会创建一个新版本的应用程序,并且部署脚本会更新符号链接。为了避免每次都重新创建临时目录,我已将临时目录移至 C:\path\app_tmp\ - 部署脚本在 app\tmp 处放置一个指向此临时目录的符号链接。
服务器是 Windows Server 2008 R2,Web 服务器是 IIS7。 C:\path\app_tmp\ 拥有完全权限(每个人都有完全控制权)。
自从更改了应用程序的位置和 tmp 目录后,用户报告了页面顶部出现的零星警告实例。应用程序处于 debug=0 但这些未出现在错误日志中。
例子:
警告: 取消链接(C:\path\app_tmp\cache\models\prefix_cake_model_default_app_modelname): 权限被拒绝 C:\path\versions[日期]\www\lib\Cake\Cache\Engine\FileEngine.php on 第 254 行
警告: SplFileInfo::openFile(C:\path\versions[日期]\www\app\tmp\cache\models\prefix_cake_model_default_app_modelname): 无法打开流:权限被拒绝 C:\path\versions[日期]\www\lib\Cake\Cache\Engine\FileEngine.php on 第 313 行
(混淆的实际路径/模型名称)
这是我在 core.php 中的内容:
$engine = 'File';
$duration = '+999 days';
if (Configure::read('debug') >= 1) {
$duration = '+10 seconds';
}
if (!isset($_SERVER['HTTP_HOST'])) {
$prefix = 'cmd_';
}
else {
$prefix = $_SERVER['HTTP_HOST'] . '_';
}
Cache::config('_cake_core_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_core_',
'path' => CACHE . 'persistent' . DS,
'serialize' => ($engine === 'File'),
'duration' => $duration,
'mask' => 0666
));
Cache::config('_cake_model_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_model_',
'path' => CACHE . 'models' . DS,
'serialize' => ($engine === 'File'),
'duration' => $duration,
'mask' => 0666
));
我在 bootstrap.php 中有这个:
Cache::config('default', array('engine' => 'File'));
有什么建议吗?我有一种感觉,也许权限没有从 app\tmp 符号链接正确继承到实际的 tmp 目录,但另一方面,错误日志似乎正确写入,这些错误只是零星的。
我的一个想法是切换到使用 Wincache,但是当我要部署数据库更改时,我找不到任何关于如何清除模型缓存的信息(目前我可以使用繁重的任务)。
【问题讨论】: