Устранение неполадок при запуске API из Flask с использованием Apache и Mod-WSGI
Я работаю над приложением Flask, которое размещено на сервере Ubuntu 16.04 под управлением Apache. Приложение использует Google Earth Engine (GEE).
GEE хранит токены и загружает токены из ~/.config/earthengine/credentials
по умолчанию. Хотя это не создает никаких проблем при python -c
при вызовах GEE, 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'
, После этого я все еще мог сделать python -c
звонит в GEE, но мне не повезло с Flask.
Я подумал о том, чтобы создать какую-то папку специально для использования GEE в контексте моего приложения Flask и затем указать earthengine/oauth.py
к этому. Однако я очень осторожен в этом.
На данный момент я понятия не имею, является ли это проблемой Flask, проблемой Ubuntu, проблемой WSGI или чем-то еще, поэтому любые предложения помогут.
Вообще говоря, есть два вопроса, которые, по моему мнению, должны помочь мне приблизиться к решению: (1) как я могу разрешить oauth-скрипту доступ к ~/.config в Ubuntu? и (2) как правильно указать apache на ~/.config в качестве домашнего каталога, т. е. какой файл.conf следует изменить, чтобы попытаться решить эту проблему?
Редактировать: прочитав некоторые вопросы mod-wsgi, я думаю, что может быть шанс, что это как-то связано с WSGIPassAuthorization
, Если так, что именно я должен сделать?
Обновление: я изменил права доступа к файлу, как предложено здесь, и я изменил файл, на который указывает oauth.py: '/root/.config/earthengine/credentials'
, Хорошая новость: я больше не получаю сообщение об ошибке при доступе к файлу. Плохая новость: теперь я получаю сообщение об ошибке из-за якобы неверного маркера обновления. Я видел, что такие вещи могут быть проблемой с часами, но мои часы выглядят хорошо для меня:
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
значение токена в моем файле учетных данных не изменяется. Похоже, это не мешает моему локальному использованию глиняного двигателя, но использование в Flask все еще остается проблемой.
Обновление: теперь я считаю, что это результат попыток совершать звонки без учетной записи службы Google.
0 ответов
У меня такая же проблема. У меня есть рабочая учетная запись службы Google. Это подтвердил Google. Кроме того, все работает нормально, когда я запускаю приложение flask локально. У него проблемы с просмотром privatekey.json только тогда, когда я запускаю приложение flask через сервер apache.