无需重启即可重新加载django CMS Apphooks的URL
项目描述
无需重启即可重新加载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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa57b6a93773d945127299c113dcc10592769e8b2c13d3b0d226b8fa9a3a9212 |
|
MD5 | f001b35de85fac69e01c1f2a624be571 |
|
BLAKE2b-256 | 701c0eff6f962e4e4d354bb430565e68fde9398eea995bd9739225c45660312b |