css changes not synced for heroku django based app on virtualbox shared folder.

概要

virtualbox上でherokuのアプリを作っていたのだが、共有フォルダにソースを置いてホストOS上からCSSをいじるとなぜかうまく反映されないため困った。 Webサーバを再起動したりキャッシュっぽいファイルを手当たり次第に消したりしてみたが、いっこうにうまくいかない。 gunicornやwhitenoiseを疑って見たものの特に関係なさそうだった。

結論としてはherokuもgunicornもwhitenoiseもdjangoも関係なかった。 virtualboxのバグらしい。 www.vagrantup.com

ホストOSではなくクライアントOSからファイルを編集すると問題なく反映されるあたりで疑って調べ始めてすぐわかったのでよかった。

対応方法

gunicornを使っている場合は以下のように--no-sendfileをつけて起動すればsendfileを無効化でき、バグを回避できる。

$ cat Procfile 
web: gunicorn proj.wsgi --no-sendfile