Phoenix 提供的陈旧静态资产

Stale static assets served from Phoenix

我正在构建我的第一个微型 Phoenix 应用程序,运行 遇到了一个非常烦人的问题:

每次我对 JS 文件进行更改时,例如web/static/js/socket.js Brunch 正在获取更改并重新编译 priv/static/js/app.js。我已验证更改实际上已正确编译到 app.js。

但是,我无法让服务器将更新后的文件提供给客户端。 有什么想法可以使缓存失效正常工作吗? 会不会是 Cowboy 的配置问题?

注意:我是 运行 Vag运行t 框内的服务器 (Ubuntu) 和主机上的浏览器 (OSX)。

更新:这变成了一个谜!显然响应的内容来自缓存文件,但长度由磁盘上文件的长度决定。

示例:
echo "hey" > foo.js
(文件大小 4)
curl http://localhost:4000/js/foo.js 的响应是 hey\n

printf "." > foo.js
(文件大小 1)
响应:h

printf "1234567890" > foo.js
(文件大小 10)
响应(十六进制):6865 790a 0000 0000 0000(响应是 hey\n 后跟空白填充)

事实证明这是 Virtual Box 的共享文件系统的一个已知问题。
切换到 NFS 解决了问题。

Cowboy 项目中对问题 812 的评论描述了我的确切问题: https://github.com/ninenines/cowboy/issues/812

除此之外,如果您的 JS 文件的更改未被选中,则将 Brunch 配置为使用轮询可能会很有用。您可以通过将以下代码段添加到 brunch-config.js.

来做到这一点
watcher: {
  usePolling: true
},