我正在为 Heroku 上托管的 Django 应用程序使用 Redis 缓存 (django-redis)。更具体地说(尽管我认为它与可能的解决方案无关),我正在使用 Redis Cloud 插件。
部署时如何清除缓存?我正在寻找类似于Clear Memcached on Heroku Deploy的答案,除了 Django,而不是 Rails。
我正在为 Heroku 上托管的 Django 应用程序使用 Redis 缓存 (django-redis)。更具体地说(尽管我认为它与可能的解决方案无关),我正在使用 Redis Cloud 插件。
部署时如何清除缓存?我正在寻找类似于Clear Memcached on Heroku Deploy的答案,除了 Django,而不是 Rails。
想出了如何使这项工作(结合 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)以将命令放置在 [从项目根级别] 中。例如,我在我的 Procfile web 命令前面添加了python manage.py clearcache &&
如下内容:
脚本/网络
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
而已!
您有以下选择:
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()