Questo post è un seguito per How to do OAuth-requiring operations in a GAE Task Queue?. Come suggerito da bossylobster in questo post, ho provato a codificare il user_id
nel mio script, ma il compito cron fallisce sempre:Come eseguire le operazioni che richiedono OAuth in un processo cron GAE?
posso vedere essendo innescato nei registri ...
2013-05-31 14:20:00.879 /update 302 5ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.1 - - [31/May/2013:11:20:00 -0700] "GET /update HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=6 cpu_ms=0 cpm_usd=0.000043 queue_name=__cron task_name=... app_engine_release=1.8.0 instance=...
- ... tuttavia, non riesce sempre (si presenta come rosso "Failed" in sezione Cron Jobs AppEngine), e la coda compito in cui dovrebbe funzionare non si apre nella sezioneTask code.
Quello che non capisco è che se apro /update
manualmente ho il prompt di accesso qui sotto. Come si suppone che cron lo ignori? Come posso eseguire il debug di cosa sta succedendo?
Grazie per l'aiuto.
EDIT/follow-on @dlebech risposta: il problema persiste dopo l'aggiunta di una linea di login: admin
alla questione url
in app.yaml
. Localmente (da l'accesso come amministratore e visitando l'URL del gestore nel tuo browser come menzionato dal Securing URLs for Cron) tutto va bene, ma una volta mi schiero, la mia app non viene mai passato il decoratore OAuth2:
Con alcuni di debug
print
dichiarazioni ...import webapp2 ... YOUTUBE_RW_SCOPE = "https://www.googleapis.com/auth/youtube" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" print "Building youtube object" print "Built youtube object" youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) print "Building decorator object" decorator = OAuth2DecoratorFromClientSecrets(CLIENT_SECRETS, YOUTUBE_RW_SCOPE) print "Built decorator object" ... class FetchHandlerPage(webapp2.RequestHandler): print "Entering FetchHandlerPage" @decorator.oauth_required def get(self): print "Entering FetchHandlerPage:get" gae_user_id = USER_ID query_string = urlencode({'user_id': gae_user_id}) taskqueue.add(url='/fetchworker?' + query_string, method='GET')
... qui è quello che vedo dopo la distribuzione nei miei ceppi GAE (i registri si ferma l'ultima riga, non succede nulla seguente):
2013-05-31 16:12:02.765 /fetch 302 1746ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.1 - - [31/May/2013:13:12:02 -0700] "GET /fetch HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=1747 cpu_ms=844 cpm_usd=0.000070 queue_name=__cron task_name=... loading_request=1 app_engine_release=1.8.0 instance=... I 2013-05-31 16:12:02.444 URL being requested: https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest?userIp=0.1.0.1 E 2013-05-31 16:12:02.764 Building youtube object E 2013-05-31 16:12:02.764 Built youtube object E 2013-05-31 16:12:02.764 Building decorator object E 2013-05-31 16:12:02.764 Built decorator object E 2013-05-31 16:12:02.764 End static variables E 2013-05-31 16:12:02.764 Entering FetchHandlerPage I 2013-05-31 16:12:02.765 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ
Ciao, grazie per avermi indirizzato verso 'login: admin', non ho capito che aveva questo effetto. Purtroppo il problema persiste (o forse è un altro? Non sono sicuro: - /).Ho aggiunto un ** EDIT/followup alla sezione @dlebech answer ** al mio post originale, cosa ne pensi? –
Perché hai ancora bisogno del decoratore oauth_required? – dragonx
@dragonx la mia app crea playlist di YouTube, ha bisogno di passare attraverso [OAuth2 dance] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows), e questo decoratore sembra il modo consigliato/più semplice andare. Ho sbagliato? –