【问题标题】:Caching on Yii of static files在 Yii 上缓存静态文件
【发布时间】:2015-06-07 12:34:45
【问题描述】:

我的 Yii 有一个愚蠢的问题,我的本地开发人员缓存 css 和 js 文件。当我尝试编辑文件时,它没有显示更改,但是火灾确实被破坏并破坏了一切。这种情况会不分青红皂白地发生一段时间,然后它会自行修复。

对于资产管理器,我的 Yii 配置是这样的:

$config['components']['assetManager']['forceCopy'] = true;
$config['components']['assetManager']['appendTimestamp'] = true;
$config['components']['assetManager']['linkAssets'] = true;

正如您在下面看到的,JS 文件只是在对鼠标悬停的字段之一进行小的颜色更改后结束。

当包含所有其他资源时,时间戳似乎没有附加到 JS 文件中。

<script src="/custom/infobox.js?v=1427807792"></script>
<script src="/js/neighbourhoods-map.js"></script>
<script src="/js/search-block.js?v=1423510537"></script>

通过在视图文件中调用 registerJsFile() 来包含该文件。

$this->registerJsFile('/js/neighbourhoods-map.js', [
    'depends' => ['\app\assets\MapsAsset'],
    'position' => View::POS_END]
);

我将上面的内容更改为包含时间戳,但问题仍然存在。

$this->registerJsFile('/js/neighbourhoods-map.js?v='.time(), [
    'depends' => ['\app\assets\MapsAsset'],
    'position' => View::POS_END]
);

这真是令人沮丧。任何人都可以阐明这里的问题吗?

【问题讨论】:

  • 你看到附加到你的 javascript src 的时间戳了吗?此外,除非您使用符号链接,否则您不需要将 linkAssets 设置为“true”
  • @BalajiViswanath - 是的,它似乎没有添加它,但它存在于其他文件中。我在帖子中添加了更多信息。
  • 您是否尝试过除 chrome 以外的其他浏览器来检查此问题是否存在于所有浏览器中?
  • @BalajiViswanath - 是的,问题在 Chrome、Firefox 和 Safari 中仍然存在

标签: javascript php css yii frontend


【解决方案1】:

我在使用 Vagrant 和 nginx 时遇到了这个问题。

解决方案是从 nginx 配置中关闭 sendfile 指令。

sendfile  off;

【讨论】:

  • 知道 Apache 会如何发生这种情况吗?
  • 我想我找到了等效的 EnableMMAP offEnableSendfile off