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
.