部署时使用Django Heroku Clear Cache

时间:2013-07-07 07:21:51

标签: django heroku redis

我正在为Heroku上托管的Django应用程序使用Redis缓存(django-redis)。更具体一点(虽然我认为它与可能的解决方案无关),但我正在使用Redis Cloud插件。

如何在部署时清除缓存?我正在寻找类似于Clear Memcached on Heroku Deploy的答案,除了Django,而不是Rails。

2 个答案:

答案 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)

您有下一个选择:

  • 我一直认为这是可能的(并且本地工作人员和&amp;&amp ;.编写命令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()