我正在为Heroku上托管的Django应用程序使用Redis缓存(django-redis)。更具体一点(虽然我认为它与可能的解决方案无关),但我正在使用Redis Cloud插件。
如何在部署时清除缓存?我正在寻找类似于Clear Memcached on Heroku Deploy的答案,除了Django,而不是Rails。
答案 0 :(得分:5)
想出如何使这项工作(MagnusGraviti的回答和heroku IRC的一些帮助的结合)。
第1步:
创建自定义命令以清除缓存。请参阅https://docs.djangoproject.com/en/dev/howto/custom-management-commands/或安装django-clear-cache https://github.com/rdegges/django-clear-cache。
第2步:
创建一个脚本(例如,scripts / web)以将命令放在[从项目根级别]中。例如,我使用python manage.py clearcache &&
添加了我的Procfile web命令,如下所示:
<强>脚本/网络强>
python manage.py clearcache && gunicorn myapp.wsgi -b 0.0.0.0:$PORT -w 5 --preload
第3步:
然后,您需要将脚本设置为可执行文件。在我的OSX机器上,命令只是:
chmod a+x scripts/web
第4步:
修改Procfile以运行脚本而不是命令:
web: scripts/web
就是这样!
答案 1 :(得分:3)
您有下一个选择:
python manage.py clear_cache
并在Procfile
启动服务器之前使用它:
web: python manage.py clear_cache && gunicorn...
如果您使用CircleCI,您可以编辑circle.yml
文件以在部署后清除缓存
如果您撰写了fabfile
,则可以在部署后添加python manage.py clear_cache
。
clear_cache命令示例:
`
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
"""
Command to clear cache
"""
help = "Clear cache"
def handle(self, *args, **options):
cache.clear()