DataPusher 无法连接到 CKAN 2.8

DataPusher is unable to connect to CKAN 2.8

DataPusher 不适用于我的 CKAN 2.8 安装。我在同一个 VPS(一个 Amazon EC2 实例)上有 DataPusher 和 CKAN。我无法从实例内部卷曲 /api/3/action/resource_show,但我可以从实例外部使用我可以从中访问 CKAN web gui 的相同 IP 地址。我正在使用默认端口 settings/followed 用于设置 CKAN 和 DataPusher/DataStore.

的官方 CKAN 文档

检查错误日志(特别是 /var/log/apache2 中的 datapusher.error.log),最新消息是:

ConnectionError: HTTPConnectionPool(host='{ckan.site_url value, in this case the public IP of the instance}', port=80): Max retries exceeded with url: /api/3/action/resource_show (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f3bb0151490>: Failed to establish a new connection: [Errno 110] Connection timed out',))

最终的问题是,使用 AWS EC2 VPS,您的 Ubuntu 实例不知道其面向 public 的 IP 地址,这可能是您正在使用的访问上述 VPS.

上托管的 CKAN web gui

理想情况下,CKAN API 可以在内部被击中,但我无法用 localhost/127.0.0.1 代替 VPS 的 external/public-facing IP地址。将 ckan site_url 设置为 localhost 的问题在于,当您尝试使用 DataPusher(例如,手动启动将资源上传到 DataStore)时,您将从 CKAN web gui 定向到什么。您的计算机显然不会知道 localhost 指的是 CKAN 开发服务器...所以简而言之,ckan site_url 值必须是 DataPusher 和 people/devices 在 public Internet 上都可以访问的值(假设您希望您的 CKAN 实例 publicly-accessible)。

这里的解决方法是在实例的安全组的入站规则中开放80端口给AWS EC2实例的publicIP地址。换句话说,您让实例在端口 80 命中 自身 。看起来效率低下,但我目前没有替代方案。有聊胜于无!

我遇到了类似的问题,但我使用了不同的方法来解决它。

系统在转到外部 DNS 服务器之前会在 /etc/hosts 文件中查找 DNS 名称。我只是将我的主机名(从 URL)指向本地 IP 地址,如下所示:

172.16.22.2ckan.installation.url

这样,服务器在需要访问 ckan.installation.url 时连接到自身,用户在需要访问站点时连接到 ckan.installation.url(public 面向 IP)。