GAE - Ошибка развертывания: "AttributeError: невозможно установить атрибут"

Когда я пытаюсь развернуть мое приложение, я получаю следующую ошибку:

Starting update of app: flyingbat123, version: 0-1
Getting current resource limits.
Password for avigmati: Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\appcfg.py", line 125, in 
    run_file(__file__, globals())
  File "C:\Program Files (x86)\Google\google_appengine\appcfg.py", line 121, in run_file
    execfile(script_path, globals_)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 4062, in 
    main(sys.argv)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 4053, in main
    result = AppCfgApp(argv).Run()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 2543, in Run
    self.action(self)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 3810, in __call__
    return method()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 3006, in Update
    self.UpdateVersion(rpcserver, self.basepath, appyaml)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 2995, in UpdateVersion
    self.options.max_size)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 2122, in DoUpload
    resource_limits = GetResourceLimits(self.rpcserver, self.config)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 355, in GetResourceLimits
    resource_limits.update(GetRemoteResourceLimits(rpcserver, config))
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appcfg.py", line 326, in GetRemoteResourceLimits
    version=config.version)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 379, in Send
    self._Authenticate()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 437, in _Authenticate
    super(HttpRpcServer, self)._Authenticate()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 281, in _Authenticate
    auth_token = self._GetAuthToken(credentials[0], credentials[1])
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 233, in _GetAuthToken
    e.headers, response_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 94, in __init__
    self.reason = args["Error"]
AttributeError: can't set attribute
2012-04-25 19:30:15 (Process exited with code 1)

Ниже показано мое приложение app.yaml:

application: flyingbat123
version: 0-1
runtime: python
api_version: 1
threadsafe: no

Похоже на ошибку аутентификации, но я ввожу действительный адрес электронной почты и пароль. Что я делаю неправильно?

Ответ 1

У меня была та же проблема. Я использую двухфакторную аутентификацию для своей учетной записи google, поэтому ранее мне приходилось вводить пароль для конкретного приложения для развертывания приложений в GAE. Если я ввел свой обычный пароль Google, я получил ошибку AttributeError: can't set attribute. Однако, когда я создал специальный пароль для приложения и использовал его, он работал

Ответ 2

Сообщение об ошибке указывает на наличие ошибки в нашем SDK. Из-за этой ошибки вы не видите причины сбоя. Однако этот кодовый блок вызывается только тогда, когда запрос аутентификации заканчивается ошибкой HTTP 403.

Вы можете временно настроить файл C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\appengine_rpc.py следующим образом, чтобы увидеть фактическую причину (добавьте строку logger.warn(body)).

except urllib2.HTTPError, e:
  if e.code == 403:
    body = e.read()
    # Add a line bellow to see the actual error
    logger.warn(body)
    response_dict = dict(x.split("=", 1) for x in body.split("\n") if x)
    raise ClientLoginError(req.get_full_url(), e.code, e.msg,
                           e.headers, response_dict)
  else:
    raise

Как только вы найдете причину, эту проблему нужно решить гораздо проще. После того, как вы решите проблему, я был бы признателен, если бы вы могли создать проблему с этим загадочным сообщением об ошибке в нашем отслеживателе проблем?

Ответ 3

Я знаю, что это не отвечает на вопрос OP, но может помочь другим, которые испытывают проблемы с использованием --oauth2, упомянутых другими в этом вопросе.

У меня есть двухэтапная аутентификация, и я использовал пароль для конкретного приложения, но мне было сложно искать и вставлять длинную строку каждый день или около того. Я обнаружил, что использование --oauth2 возвращает

This application does not exist (app_id=u'my-app-id')

но добавив опцию --no_cookies

appcfg.py --oauth2 --no_cookies update my-app-folder\

Теперь я могу аутентифицироваться каждый раз, просто нажав [Разрешить доступ] в открывшемся окне браузера.

Я использую Python SDK 1.7.2 в Windows 7

ПРИМЕЧАНИЕ. Я нашел это решение в другом месте, но я не могу вспомнить, где, поэтому я не могу правильно его атрибутировать. К сожалению.

.

Ответ 4

У меня была такая же проблема, и после вставки logger.warn(body) я получаю следующее: WARNING appengine_rpc.py:231 Error=BadAuthentication Info=InvalidSecondFactor

Стандартное сообщение об ошибке могло быть более полезным, но это заставляет задуматься, не следует ли мне использовать специальный пароль для приложения?

Ответ 5

Добавьте флаг --oauth2 в обновление appcfg.py для более легкого исправления.

Ответ 6

Это также происходит, если ваше значение default_error совпадает с вашим static_dirs в app.yaml.