2

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

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

4

2 回答 2

6

想出了如何使这项工作(结合 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

而已!

于 2013-07-07T20:03:08.753 回答
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()
于 2013-07-07T08:43:11.473 回答