服务器正在提供旧版本的静态文件,但修剪或填充以匹配新版本的长度

时间:2013-07-04 01:10:48

标签: caching flask gunicorn werkzeug

我的问题的症状几乎完全符合这个问题:Changed static files are cropped/padded to the new size and served the old - Fedora

每当我更改静态文件(例如.js和.css)时,这些更改都不会显示在服务文件中。但是,如果我的更改导致文件更改长度,则提供的文件 匹配新长度:

  • 如果我从静态文件中的任何位置删除字符,那么最后会用很多字符修剪服务文件。
  • 如果我将字符添加到静态文件中的任何位置,那么服务文件最后会填充那么多 (即U + FFFD)字符。

链接答案无法解决我的问题的原因是我没有使用Apache。我正在为Heroku编写一个Python Web应用程序,所以我使用的是gunicorn和Flask(因此也是Werkzeug)。链接的答案说在Apache中禁用sendfile解决了这个问题,所以我尝试将'USE_X_SENDFILE'变量设置为False,按照this page,但它没有帮助。我还将'SEND_FILE_MAX_AGE_DEFAULT'设置为1以进一步尝试防止某种缓存发生,这也没有帮助。

如果不是很明显,我真的不太了解配置网络服务器,所以在用完了相关的Google点击后,我对可能导致这种情况的原因感到茫然。帮助

2 个答案:

答案 0 :(得分:4)

Virtualbox hates sendfile.如果您将其关闭,它应该可以正常工作。

例如,在nginx中,您需要添加sendfile: off;。 在Apache中它只是EnableSendfile off

答案 1 :(得分:2)

最后,事实证明这可能是由VM问题引起的。有问题的代码位于Windows驱动器上,但是通过共享目录访问代码的Linux VM中提供服务。重新安装份额似乎解决了问题(尽管不一定可靠)。