2016-06-10 127 views
0

我建立我的第一个微小的凤凰应用投放,撞上了超级讨厌的问题:陈旧的静态资产从凤凰

每当我做出改变JS文件如web/static/js/socket.js Brunch正在接受更改并重新编译priv/static/js/app.js。我已经验证了这些更改实际上已正确编译到app.js中。

但是,我无法让服务器向客户端提供更新的文件。 任何想法,我可以使缓存失效正常工作? 这可能是牛仔配置问题吗?

注意:我在Vagrant框(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后跟空白填充)

+0

这是整页刷新?当你在浏览器中重新加载页面时,你会得到旧的'app.js'吗?这是在dev还是prod? – Dogbert

+0

是的,在整页上重新加载。我正在使用cURL来确保它与浏览器缓存无关。它在开发中。我尝试将一个新文件(foo.js)放入priv/static/js中,并且具有相同的问题。服务器将选取新文件,但即使在文件发生更改后,服务器也会继续提供原始内容。 – jonasmaturana

回答

1

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

在牛仔上项目812问题的注释说明我确切的问题: https://github.com/ninenines/cowboy/issues/812

此外,它可能是早午餐配置为使用轮询如果更改您的JS文件不被纠察起来非常有用。您可以通过将以下代码段添加到brunch-config.js来完成此操作。

watcher: { 
    usePolling: true 
},