为什么从资源 API 获取的运单号与数据库中记录的运单号不同?
Why tracking number get from resource API is different from the tracking number recorded in database?
我在 CKAN 2.7.3 API docs 中使用了 resource_show
从特定资源中获取元数据。在我的 tracking_summary
table 中,我有一些跟踪编号大于 0 的资源。但是,当我将 resource_show
与 {'include_tracking': True}
一起使用时,它同时显示 recent
total
为 0。
我在 tracking_summary
table 中的资源记录如下:
url | running_total | recent_views
-----------------------------------------------------------------------------------------------------------------+---------------+--------------
/dataset/d5cd38f4-03df-450e-9eb8-4967bc9741da/resource/844625fb-80a9-445c-85e7-5be8f10ec57b/download/test.csv | 1 | 1
我确认我已经运行 paster tracking update
和paster search-index rebuild
的命令。我不知道我现在错过了什么。
我找到原因了。如果我们查看存储在 tracking_summary
table 中的 url
,它不包含 http 架构和域:http://example.ckan.com
。但是,如果我们从 resource
table 查询资源,url
将包含完整的 http url。此外,当您尝试在应用程序中使用 {'include_tracking': True}
调用 resource_show
API 时,Tracking
模型中的 get_for_resource(cls, url)
将引用完整的 url
而不是部分的。因此,如果我们存储部分的,get_for_resource
将在行 data = obj.filter_by(url=url).order_by(text('tracking_date desc')).first()
处失败。因此,当我们在tracking_summary
中保存资源url时,我们应该存储完整的如:http://example.ckan.com/dataset/<package_id>/resource/<resource_id>/<file_name>
.
我在 CKAN 2.7.3 API docs 中使用了 resource_show
从特定资源中获取元数据。在我的 tracking_summary
table 中,我有一些跟踪编号大于 0 的资源。但是,当我将 resource_show
与 {'include_tracking': True}
一起使用时,它同时显示 recent
total
为 0。
我在 tracking_summary
table 中的资源记录如下:
url | running_total | recent_views
-----------------------------------------------------------------------------------------------------------------+---------------+--------------
/dataset/d5cd38f4-03df-450e-9eb8-4967bc9741da/resource/844625fb-80a9-445c-85e7-5be8f10ec57b/download/test.csv | 1 | 1
我确认我已经运行 paster tracking update
和paster search-index rebuild
的命令。我不知道我现在错过了什么。
我找到原因了。如果我们查看存储在 tracking_summary
table 中的 url
,它不包含 http 架构和域:http://example.ckan.com
。但是,如果我们从 resource
table 查询资源,url
将包含完整的 http url。此外,当您尝试在应用程序中使用 {'include_tracking': True}
调用 resource_show
API 时,Tracking
模型中的 get_for_resource(cls, url)
将引用完整的 url
而不是部分的。因此,如果我们存储部分的,get_for_resource
将在行 data = obj.filter_by(url=url).order_by(text('tracking_date desc')).first()
处失败。因此,当我们在tracking_summary
中保存资源url时,我们应该存储完整的如:http://example.ckan.com/dataset/<package_id>/resource/<resource_id>/<file_name>
.