2012-04-25 5 views
11

Quando provo a schierare la mia app ottengo il seguente errore:GAE - Errore di distribuzione: "AttributeError: attributo non può impostare"

 
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) 

Di seguito è riportato il mio app.yaml:

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

Sembra un errore di autenticazione, ma sto inserendo un indirizzo email e una password validi. Cosa sto sbagliando?

+0

ho creato nuovi app google appengine e la mia app è stata caricata in modo efficace. ma con il vecchio account, non riesco ancora a distribuire. – user1356067

+0

Forse il tuo vecchio account deve essere sbloccato usando captcha, prova a scaricarlo all'indirizzo https://www.google.com/a/google.com/UnlockCaptcha –

risposta

7

Il messaggio di errore indica che c'è un errore nel nostro SDK. A causa di questo bug, non è possibile vedere il motivo dell'errore. Tuttavia, questo blocco di codice viene chiamato solo quando la richiesta di autenticazione termina con errore HTTP 403.

È possibile modificare temporaneamente il file C: \ Programmi (x86) \ Google \ google_appengine \ google \ appengine \ tools \ appengine_rpc.py come segue per vedere il motivo reale (aggiungere la riga 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 

Una volta trovato il motivo, questo problema deve essere molto più facile da risolvere. Dopo aver risolto il problema, ti sarei grato se potessi creare un problema su questo misterioso messaggio di errore in our issue tracker?

13

Ho avuto lo stesso problema. Sto utilizzando l'autenticazione a 2 fattori per il mio account google, quindi in precedenza ho dovuto inserire una password specifica per l'applicazione per distribuire le app su GAE. Se ho inserito la mia password google normale ho ricevuto l'errore AttributeError: can't set attribute. Tuttavia quando ho creato un application specific password e lo ha utilizzato, ha funzionato

+0

Conferma ciò, ho l'autenticazione a 2 livelli e la creazione di una password specifica per l'applicazione risolve il problema – csadam

+0

+1. Era l'autenticazione a due fattori (ha bisogno del codice SMS) che sembra bloccarlo. Dopo aver generato la password specifica dell'applicazione come suggerito, la mia app è stata caricata correttamente. – goosemanjack

+0

o anche meglio: usa la nuova opzione '--oauth2'. – proppy

1

Ho avuto lo stesso problema e dopo aver inserito logger.warn (corpo), ottengo questo: WARNING appengine_rpc.py:231 Error=BadAuthentication Info=InvalidSecondFactor

Il messaggio di errore standard avrebbe potuto essere più disponibile , ma questo mi chiede se non dovrei usare una password specifica per l'applicazione?

+0

Ora ho generato una password specifica per l'applicazione e quindi funziona! –

+0

Ciò accade quando la verifica in due passaggi è attiva. È possibile generare una passwrod all'indirizzo https://accounts.google.com/b/0/SmsAuthConfig –

1

aggiungere il flag --oauth2 per appcfg.py aggiornamento per una correzione più facile

2

So che questo non risponde alla domanda OP, ma può aiutare gli altri che soffrono di problemi di utilizzo --oauth2 detto da altri in questa domanda .

Ho la verifica in due passaggi abilitata e ho utilizzato la password specifica dell'applicazione, ma ho trovato noioso cercare e incollare la stringa lunga ogni giorno o così. Ho trovato che l'uso di --oauth2 ritorna

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

ma aggiungendo l'opzione --no_cookies

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

ora posso autenticarsi ogni volta semplicemente cliccando [Consentire l'accesso] nella finestra del browser che viene aperto .

sto usando Python SDK 1.7.2 su Windows 7

NOTA: ho trovato altrove questa soluzione, ma non riesco a ricordare dove, quindi non posso correttamente attribuirlo. Scusate.

.

0

Questo accade anche se il valore default_error si sovrappone con il tuo static_dirs in app.yaml.

Problemi correlati