appcfg.py показывает, что вы должны войти в систему как администратор
Когда я пытаюсь загрузить образец данных CSV в мое приложение GAE через appcfg.py
, это показывает ошибку ниже 401.
2015-11-04 10:44:41,820 INFO client.py:571 Refreshing due to a 401 (attempt 2/2)
2015-11-04 10:44:41,821 INFO client.py:797 Refreshing access_token
Error 401: --- begin server output ---
You must be logged in as an administrator to access this.
--- end server output ---
Вот команда, которую я пробовал,
appcfg.py upload_data --application=dev~app --url=http://localhost:8080/_ah/remote_api --filename=data/sample.csv
5 ответов
Вот как мы это делаем, чтобы использовать пользовательскую аутентификацию.
Пользовательский обработчик в app.yaml
- url: /remoteapi.*
script: remote_api.app
Пользовательское приложение wsgi в remote_api.py для переопределения CheckIsAdmin
from google.appengine.ext.remote_api import handler
from google.appengine.ext import webapp
import re
MY_SECRET_KEY = 'MAKE UP PASSWORD HERE' # make one up, use the same one in the shell command
cookie_re = re.compile('^"?([^:]+):.*"?$')
class ApiCallHandler(handler.ApiCallHandler):
def CheckIsAdmin(self):
"""Determine if admin access should be granted based on the
auth cookie passed with the request."""
login_cookie = self.request.cookies.get('dev_appserver_login', '')
match = cookie_re.search(login_cookie)
if (match and match.group(1) == MY_SECRET_KEY
and 'X-appcfg-api-version' in self.request.headers):
return True
else:
self.redirect('/_ah/login')
return False
app = webapp.WSGIApplication([('.*', ApiCallHandler)])
Отсюда мы пишем сценарий загрузки данных, которые были экспортированы из нашего живого приложения. Используйте тот же пароль, который вы создали в скрипте Python выше.
echo "MAKE UP PASSWORD HERE" | appcfg.py upload_data --email=some@example.org --passin --url=http://localhost:8080/remoteapi --num_threads=4 --kind=WebHook --filename=webhook.data --db_filename=bulkloader-progress-webhook.sql3
WebHook
а также webhook.data
специфичны для Kind
что мы экспортировали с производства.
У меня была похожая проблема, где appcfg.py
не давал мне никаких учетных данных, поэтому я не мог пройти проверку подлинности. Я опустил версию с GAELauncher 1.27 до 1.26, и аутентификация снова начала работать.
Временное решение: перейдите на страницу https://console.developers.google.com/storage/browser/appengine-sdks/featured/ чтобы получить версию 1.9.26.
Отправленный отчет об ошибке: https://code.google.com/p/google-cloud-sdk/issues/detail?id=340
Вы не можете использовать appcfg.py upload_data
команда с сервером разработки [edit: как есть; см. ответ Джоша Дж.] Работает только с remote_api
конечная точка работает на App Engine и аутентифицируется с помощью OAuth2.
Простой способ загрузить данные в хранилище данных сервера dev - это создать конечную точку, которая читает файл CSV и создает соответствующие объекты хранилища данных, а затем отправляет их в браузер. (Обязательно удалите конечную точку перед развертыванием приложения или ограничьте доступ к URL-адресу с помощью login: admin
.)
У вас должен быть токен для учетной записи Google, которая не является администратором этого проекта. Попробуйте передать --no_cookies
флаг, чтобы он снова запросил аутентификацию.
Может быть, это как-то связано с этим? Из документов
Подключение вашего приложения к локальному серверу разработки
Чтобы использовать локальный сервер разработки для вашего приложения, работающего локально, вам необходимо сделать следующее:
Установите переменные среды. Добавьте или измените код подключения хранилища данных вашего приложения. Установка переменных среды
Создайте переменную среды DATASTORE_HOST и задайте для нее хост и порт, которые прослушивает локальный сервер разработки. Хост и порт по умолчанию - http://localhost:8080/. (Примечание. Если вы используете аргументы командной строки port и / или host для изменения этих значений по умолчанию, обязательно измените DATASTORE_HOST соответствующим образом.) В следующем примере оболочки bash показано, как установить эту переменную:
export DATASTORE_HOST = http://localhost:8080/ Создайте переменную среды с именем DATASTORE_DATASET и задайте для нее идентификатор набора данных, как показано в следующем примере оболочки bash:
export DATASTORE_DATASET = Примечание. Клиентские библиотеки Python и Java ищут переменные среды DATASTORE_HOST и DATASTORE_DATASET.
Ссылка на документы