本周我在服务器上移动了一个CakePHP应用程序,以便从C:\ path \ current \提供服务,其中current是符号链接到C:\ path \ versions [date]。以前该应用程序位于C:\ inetpub \ wwwroot。
因此,每次部署更改时,我都会创建新版本的应用程序,部署脚本会更新符号链接。为了避免每次都重新创建临时目录,我已将临时目录移动到C:\ path \ app_tmp \ - 部署脚本在指向此临时目录的app \ tmpt处删除符号链接。< / p>
服务器是Windows Server 2008 R2,Web服务器是IIS7。 C:\ path \ app_tmp \具有完全权限(Everyone具有完全控制权)。
由于更改了应用程序和tmp目录的位置,因此用户会报告页面顶部出现的零星警告实例。该应用程序处于debug = 0但这些不会出现在错误日志中。
示例:
警告: 取消链接(C:\路径\ app_tmp \缓存\型号\ prefix_cake_model_default_app_modelname): 许可被拒绝 C:\ path \ versions [date] \ www \ lib \ Cake \ Cache \ Engine \ FileEngine.php on 第254行
警告: SplFileInfo ::中openFile(C:\路径\版本[日期] \ WWW \程序\ tmp目录\缓存\型号\ prefix_cake_model_default_app_modelname): 无法打开流:权限被拒绝 C:\ path \ versions [date] \ 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,但是当我有一个数据库更改要部署时,我无法找到有关如何清除模型缓存的任何信息(目前我可以清除模拟缓存与grunt任务)。
答案 0 :(得分:0)
我还没有能够在坚持使用默认文件缓存的同时解决这个问题。我已将应用程序切换为使用Wincache。要在进行数据库更改时清除模型缓存,我已编写了一个简短的脚本来执行:
Cache::clear('_cake_model_');
这必须在浏览器中完成,因为CLI使用的是与IIS不同的缓存,但我已经使它成为了#gruntable&#34;通过使用grunt-shell并执行:start http://script/location/clear_cache