CakePHP缓存权限问题

时间:2014-05-28 13:14:33

标签: cakephp caching

本周我在服务器上移动了一个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任务)。

1 个答案:

答案 0 :(得分:0)

我还没有能够在坚持使用默认文件缓存的同时解决这个问题。我已将应用程序切换为使用Wincache。要在进行数据库更改时清除模型缓存,我已编写了一个简短的脚本来执行:

Cache::clear('_cake_model_');

这必须在浏览器中完成,因为CLI使用的是与IIS不同的缓存,但我已经使它成为了#gruntable&#34;通过使用grunt-shell并执行:start http://script/location/clear_cache