2012-04-25 16 views
11

Kiedy próbuję wdrożyć mojej aplikacji pojawia się następujący błąd:GAE - błąd Wdrożenie: "AttributeError: nie można ustawić atrybut"

 
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) 

Poniżej jest moja app.yaml:

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

Wygląda na to, że wystąpił błąd uwierzytelnienia, ale wpisuję poprawny adres e-mail i hasło. Co robię źle?

+0

Tworzę nowe aplikacje Google i moja aplikacja została przesłana pomyślnie. ale pod starym kontem nadal nie mogę wdrożyć. – user1356067

+0

Może twoje stare konto musi zostać odblokowane za pomocą captcha, spróbuj je wyładować na https://www.google.com/a/google.com/UnlockCaptcha –

Odpowiedz

7

Komunikat o błędzie wskazuje, że w naszym pakiecie SDK występuje błąd. Z powodu tego błędu nie widzisz przyczyny niepowodzenia. Jednak ten blok kodu jest wywoływany tylko wtedy, gdy żądanie uwierzytelnienia kończy się błędem HTTP 403.

Możesz tymczasowo zmodyfikować plik C: \ Program Files (x86) \ Google \ google_appengine \ google \ appengine \ tools \ appengine_rpc.py w następujący sposób, aby zobaczyć rzeczywisty powód (dodaj linię 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 

Raz, jeśli znajdziesz przyczynę, problem ten musi być znacznie łatwiejszy do rozwiązania. Po rozwiązaniu problemu, byłbym wdzięczny, gdyby można było utworzyć problem dotyczący tego tajemniczego komunikatu o błędzie w our issue tracker?

13

Miałem ten sam problem. Używam uwierzytelniania 2-czynnikowego dla mojego konta Google, więc wcześniej musiałem wprowadzić hasło aplikacji, aby wdrożyć aplikacje na GAE. Jeśli wprowadziłem moje normalne hasło do google, dostałem błąd AttributeError: can't set attribute. Jednak kiedy stworzył application specific password i użył go, to działało

+0

Potwierdzam to, mam autoryzację 2 poziomów i tworzenie hasła specyficznego dla aplikacji rozwiązuje problem. – csadam

+0

+1. Było to uwierzytelnianie dwuskładnikowe (wymaga kodu SMS), które wydaje się blokować. Po wygenerowaniu określonego hasła aplikacji zgodnie z sugestią moja aplikacja została pomyślnie przesłana. – goosemanjack

+0

lub nawet lepiej: użyj nowej opcji '--oauth2'. – proppy

1

miałem ten sam problem i po włożeniu logger.warn (korpus), otrzymuję to: WARNING appengine_rpc.py:231 Error=BadAuthentication Info=InvalidSecondFactor

Standardowy komunikat o błędzie mogło być bardziej pomocny , ale zastanawiam się, czy nie powinienem używać hasła specyficznego dla aplikacji?

+0

Mam teraz wygenerowane hasło specyficzne dla aplikacji, a następnie działa! –

+0

Dzieje się tak, gdy włączona jest weryfikacja dwuetapowa. Passwrod można wygenerować na https://accounts.google.com/b/0/SmsAuthConfig –

1

Dodaj --oauth2 flagę appcfg.py aktualizacji dla łatwiejszego fix

2

wiem, że to nie jest odpowiedź na pytanie OP, ale może pomóc innym, którzy problemy z używaniem --oauth2 wymienionych przez innych w tej kwestii .

Mam włączoną weryfikację dwuetapową, a ja używałem hasła specyficznego dla aplikacji, ale stwierdziłem, że nudne jest wyszukiwanie i wklejanie długich ciągów każdego dnia. Okazało się, że za pomocą --oauth2 zwraca

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

ale dodając opcję --no_cookies

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

mogę teraz uwierzytelnienia za każdym razem, klikając przycisk [Zezwalaj na dostęp] w oknie przeglądarki, który jest otwarty .

Używam Pythona SDK 1.7.2 na Windows 7

UWAGA: Znalazłem rozwiązanie gdzie indziej, ale nie pamiętam gdzie, więc nie mogę właściwie go atrybutów. Przepraszam.

.

0

Zdarza się to również, gdy wartość default_error pokrywa się z wartością static_dirs w app.yaml.

Powiązane problemy