ubuntu - 使用 Apache 和 Mod-WSGI 从 Flask 运行 API 时遇到问题

标签 ubuntu flask config mod-wsgi google-auth-library

我正在开发一个托管在运行 Apache 的 Ubuntu 16.04 服务器上的 Flask 应用程序。该应用程序利用 Google 地球引擎 (GEE)。

GEE 将 token 存储在 ~/.config/earthengine/credentials 中并从其中加载 token 默认。虽然这在制作 python -c 时不会造成任何问题调用 GEE,GEE 无法从 Flask 中访问 token ,因此无法运行。

也就是说,当在我的 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' .这样做之后,我仍然能够制作python -c调用 GEE,但我对 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' .好消息:我不再收到有关访问文件的错误。坏消息:我现在收到一个由表面上错误的刷新 token 导致的错误。我已经看到这种事情可能是 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我的凭证文件中的 token 值没有改变。这似乎并没有妨碍我在本地使用 earthengine,但是在 Flask 中使用仍然是一个问题。

更新:我现在认为这是尝试在没有 Google 服务帐户的情况下调用电话的结果。

最佳答案

我有这个相同的问题。我确实有一个有效的谷歌服务帐户。谷歌证实了这一点。此外,当我在本地运行 flask 应用程序时,一切正常。当我通过 apache 服务器启动 flask 应用程序时,只有看到 privatekey.json 时才会出现问题。

关于ubuntu - 使用 Apache 和 Mod-WSGI 从 Flask 运行 API 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309956/

相关文章:

perl - 如何从 Perl 访问 INI 文件?

scala - 如何从下载 Spark 页面的源代码构建 Spark?

c++ - 使用 setuid 运行 git 'post-receive' hook 失败

python - 在 Google App Engine 中部署应用程序时出现内存错误

python - 尝试使用Docker访问MongoDB时,连接被拒绝[Errno 111]

c# - 在 ASP.NET MVC 应用程序中保存配置信息的最佳实践在哪里?

ruby - 检查GitLab API访问: FAILED.代码:404

ubuntu - 我无法编译 VW34 的配置脚本

python - jinja2 从字符串 : TypeError: no loader for this environment specified 加载模板

php - 如何在 Laravel 中添加和更新配置变量