我需要在全球CKAN环境中使用一些实时数据。
我使用Jinja2从中渲染一些html。首先我使用了ckan.lib.app_globals
from ckan.lib.app_globals import app_globals as g
g.my_data = retrive_data_from_other_source
主要问题 - g
只更新一次,但我需要保持同步。要立即更新g
,我需要重新启动apache,但这不是一个选项。
答案 0 :(得分:0)
每个CKAN线程都有自己的g副本。因此,如果您在一个线程中更改它,它将不会更新其他线程。
它被描述为'全局',因为它包含所有请求使用的信息,但是一旦ckan完成启动阶段,它基本上是只读的。它非常适合存储配置/设置,但不适合您想要的内容。
要在不同的CKAN请求之间共享实时数据,您需要将它放在CKAN外部,例如redis或memcached等。
答案 1 :(得分:0)
经过努力,我发现了最好的方法。这个想法是用的 模板助手:http://docs.ckan.org/en/latest/theming/templates.html#custom-template-helper-functions