【问题标题】:CakePHP cache permissions issuesCakePHP 缓存权限问题
【发布时间】: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,但是当我要部署数据库更改时,我找不到任何关于如何清除模型缓存的信息(目前我可以使用繁重的任务)。

【问题讨论】:

    标签: cakephp caching


    【解决方案1】:

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

    Cache::clear('_cake_model_');
    

    这必须在浏览器中完成,因为 CLI 使用与 IIS 不同的缓存,但我通过使用 grunt-shell 将其设置为“gruntable”并执行:start http://script/location/clear_cache

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2019-03-02
      • 1970-01-01
      • 2018-03-15
      • 2013-06-10
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多