Server is serving old versions of static files, bu

2020-02-10 16:13发布

问题:

The symptoms of my problem match this question pretty much exactly: Changed static files are cropped/padded to the new size and served the old - Fedora

Whenever I make changes to my static files (e.g. .js and .css), those changes don't show up in the served file. However, if my changes cause the file to change length, then the served file does match the new length:

  • If I delete characters from anywhere in the static file, then the served file is trimmed at the end by that many characters.
  • If I add characters to anywhere in the static file, then the served file is padded with that many � (that's U+FFFD) characters at the end.

The reason the linked answer doesn't solve my problem is that I'm not using Apache. I'm writing a Python web app for Heroku, so I'm using gunicorn and Flask (and therefore Werkzeug). The linked answer says that disabling sendfile in Apache solved the problem, so I tried setting the 'USE_X_SENDFILE' variable to False, as per this page, but it didn't help. I also set 'SEND_FILE_MAX_AGE_DEFAULT' to 1 in a further attempt to prevent some sort of caching from happening, and that didn't help either.

If it's not obvious, I really don't know much at all about configuring web servers, so having run out relevant Google hits, I'm at a loss as to what might be causing this. Help?

回答1:

Virtualbox hates sendfile. If you turn it off it should work.

For example in nginx you would need to add sendfile: off;. In Apache it's just EnableSendfile off.



回答2:

In the end it turned out that this was probably being caused by VM issues. The code in question was located on a Windows drive, but was being served from within a Linux VM that was accessing the code via a shared directory. Remounting the share seemed to fix the problem (although not necessarily reliably).