更新全局上下文 CKAN
Update Global context CKAN
我需要一些全球 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,但这不是一个选项。
每个 CKAN 线程都有自己的 g 副本。因此,如果您在一个线程中更改它,它不会更新其他线程。
它被描述为 'global' 因为它包含所有请求使用的信息,但是是的,一旦 ckan 完成其启动阶段,它基本上是只读的。它非常适合存储 config/settings,但不是您想要的。
要在不同的 CKAN 请求之间共享实时数据,您需要将其放在 CKAN 外部的东西中,例如 redis 或 memcached 等。
经过努力我找到了最好的方法。这个想法是使用
模板助手:http://docs.ckan.org/en/latest/theming/templates.html#custom-template-helper-functions
我需要一些全球 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,但这不是一个选项。
每个 CKAN 线程都有自己的 g 副本。因此,如果您在一个线程中更改它,它不会更新其他线程。
它被描述为 'global' 因为它包含所有请求使用的信息,但是是的,一旦 ckan 完成其启动阶段,它基本上是只读的。它非常适合存储 config/settings,但不是您想要的。
要在不同的 CKAN 请求之间共享实时数据,您需要将其放在 CKAN 外部的东西中,例如 redis 或 memcached 等。
经过努力我找到了最好的方法。这个想法是使用 模板助手:http://docs.ckan.org/en/latest/theming/templates.html#custom-template-helper-functions