5

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?

GAE login prompt

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 
    

risposta

4

Come si cron suppone per aggirare questo?

Assicurarsi che l'url cron è configurato con login: admin e nonlogin: required. I lavori Cron "superano il prompt di accesso" automaticamente. Vedere the documentation per ulteriori informazioni.

Come posso eseguire il debug di cosa sta succedendo?

Dal momento che un processo di cron viene avviata da una richiesta GET ad un URL specifico, si dovrebbe essere in grado di eseguire il debug del lavoro da solo facendo una richiesta GET a quella URL e sia vedere che cosa gli errori del server di sviluppo fa o vedere che cosa è nei registri per la richiesta GET.

+0

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? –

+0

Perché hai ancora bisogno del decoratore oauth_required? – dragonx

+0

@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? –

Problemi correlati