跳转到主要内容

无需重启即可重新加载django CMS Apphooks的URL

项目描述

https://travis-ci.org/aldryn/aldryn-apphook-reload.svg?branch=develop https://img.shields.io/coveralls/aldryn/aldryn-apphook-reload.svg

无需重启即可重新加载django CMS Apphooks的URL

简介

Django CMS 允许通过Apphooks扩展cms页面。Apphooks保存在数据库中,这意味着URL依赖于数据库内容。为了使Apphooks的更改在reverse(){% url ... %}调用中反映出来,通常需要重启Web服务器。

aldryn-apphook-reload将自动从Django CMS Apphooks重新加载URL,无需重启Web服务器。它监听cms.signals.urls_need_reloading并触发重新加载。

该信号仅在更改数据库的过程可用。为了使其他进程知道何时重新加载(无论是gunicorn工作进程还是其他服务器上的进程),数据库中会保存一个令牌。这会导致性能损失:每次请求1个数据库查询。

安装

  • aldryn_apphook_reload添加到INSTALLED_APPS

  • aldryn_apphook_reload.middleware.ApphookReloadMiddleware添加到MIDDLEWARE(尽可能放置在顶部附近)

  • 运行迁移:python manage.py migrate aldryn_apphook_reload

高级

如果触发 cms.signals.urls_need_reloading 的过程是在负载下(每秒大约 2 个请求)的简单 runserver,那么在其他进程上有时会失败。这可能是因为一个未知的竞争条件,其中数据库中的令牌已经被刷新,但新的 apphooks 还没有在数据库中。其他进程会立即尝试重新加载,并重新加载旧的 apphooks。不过,在默认模式和 gevent 模式下使用 gunicorn 进行测试时,工作正常。

为什么不将令牌保存在缓存后端以获得更好的性能? - 因为修改缓存会立即发生,在请求结束时数据库事务提交之前。因此,其他进程会提前重新加载它们的 URL。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

aldryn-apphook-reload-0.3.0.tar.gz (5.9 kB 查看哈希值)

上传时间 源代码