【发布时间】:2019-05-26 01:21:09
【问题描述】:
我正在开发一个托管在运行 Apache 的 Ubuntu 16.04 服务器上的 Flask 应用程序。该应用程序利用 Google 地球引擎 (GEE)。
GEE 默认存储令牌并从~/.config/earthengine/credentials 加载令牌。虽然这在对 GEE 进行 python -c 调用时不会造成任何问题,但 GEE 无法从 Flask 中访问令牌,因此无法运行。
也就是说,当在我的 Flask 应用程序中调用时,GEE 会引发异常。我已经通过我的 apache error_log 追溯了这个异常,我相信这是问题的根源:
[wsgi:error] tokens = json.load(open(oauth.get_credentials_path())
[wsgi:error] FileNotFoundError: [Errno 2] No such file or directory:
'var/www/.config/earthengine/credentials'
我尝试将earthengine/oauth.py 中的默认凭据文件路径稍微更改为'. /.config/earthengine/credentials'。这样做之后,我仍然可以向 GEE 拨打 python -c 电话,但我在 Flask 上没有运气。
我考虑过专门为在我的 Flask 应用程序的上下文中使用 GEE 制作某种文件夹,然后将 earthengine/oauth.py 指向它。但是,我对此非常谨慎。
目前,我不知道这是 Flask 问题、Ubuntu 问题、WSGI 问题还是其他问题,所以任何建议都会有所帮助。
一般来说,我觉得有两个问题可以帮助我更接近解决方案:(1) 如何允许 oauth 脚本访问 Ubuntu 上的 ~/.config? (2) 如何正确地将 apache 指向 ~/.config 作为主目录,即我应该修改哪个 .conf 文件以尝试解决此问题?
编辑:阅读了some mod-wsgi issues,我认为这可能与WSGIPassAuthorization 有关。如果是这样,我具体应该怎么做?
更新:我已按照here 的建议更改了文件权限,并将oauth.py 指向的文件更改为'/root/.config/earthengine/credentials'。好消息:我不再收到有关访问文件的错误。坏消息:我现在收到一个由表面上错误的刷新令牌导致的错误。我已经看到这种东西可能是clock issue,但我的时钟看起来还不错:
Local time: Sun 2019-05-26 17:11:12 UTC
Universal time: Sun 2019-05-26 17:11:12 UTC
RTC time: Sun 2019-05-26 17:11:12
Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
(当我查看ntpd -c lpeer output 时,时钟看起来也不错。)
因此,我可能会注意到,当我earthengine authenticate 时,我的凭据文件中的令牌值不会改变。这不似乎妨碍了我在本地使用 earthengine,但在 Flask 中使用仍然是一个问题。
更新:我现在认为这是尝试在没有 Google 服务帐户的情况下拨打电话的结果。
【问题讨论】:
标签: ubuntu flask config mod-wsgi google-auth-library