背景
我们正在AWS上使用DataStore扩展实现CKAN,并通过python CKAN API与它进行交互。 AWS基本上分为两个环境:
PRIV:用于内部和QA /暂存目的,托管在https://private.company.com
PUB:适用于托管在https://private.company.com
PUB是通过CloudFront创建的,并使用PRIV数据库的只读副本。它与PRIV基本相同,只是它是只读的。
挑战
PUB中的资源URL指向PRIV环境。例如,在公共环境中运行PUB_ckan.resource_show(id='123')
api调用将返回以下内容:
{...
' datastore_active':False,
' id':' 123',
'名称':'资源1',
' package_id':' abc',
'州':'活跃',
' url':' https:// private.company.com /dataset/f688/resource/e3c785/download/file.zip',
' url_type':'上传'
...}
对于通过CKAN API或DataStore扩展程序上传的文件,这是相同的(在这种情况下,它们标记为' url_type':'数据存储区)。
期望
环境之间的所有包/资源元数据应该相同,但资源URL除外,它必须反映PUB URL,以便最终用户针对高可用性的安全环境进行api调用。即:
' url':' https://public.company.com/dataset/f688/resource/e3c785/download/file.zip'
到目前为止,我已经研究过配置文件是否包含使用相对URL的设置,还尝试通过Python脚本手动更新URL,但都没有成功。对此的任何帮助将不胜感激。
答案 0 :(得分:0)
如果您想继续使用相同的基础数据库,那么最简单的方法可能是在公共实例上安装一个小型插件,该插件实现IResourceController
interface并使用该接口的before_show
method来更改资源URL
但是请注意before_show
文档中的以下警告:
请注意,此方法不仅会用于UI显示,还会在其他方法(例如删除资源)中调用,因为显示包用于访问包中的资源。
因此,您绝对应该测试您的URL修改不会影响CKAN的其他部分。