Wie führe ich OAuth-erfordernde Operationen in einem GAE-Cron-Job durch?

Dieser Beitrag ist eine Fortsetzung vonWie führe ich OAuth-Vorgänge in einer GAE-Task-Warteschlange durch?. Wie von bossylobster in diesem Beitrag vorgeschlagen, habe ich versucht, dieuser_id In meinem Skript schlägt die Cron-Task jedoch immer fehl:

Ich kann sehen, dass es in den Protokollen ausgelöst wird ...

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=...
... schlägt jedoch immer fehl (wird rot angezeigt)"Gescheitert" in AppEnginesZeitgesteuerte Aufgaben Abschnitt), und die Task-Warteschlange, die ausgeführt werden soll, wird nie in der Task-Warteschlange angezeigtAufgabenwarteschlangen Sektion.

Was ich nicht verstehe, ist, dass ich öffne/update manuell Ich habe die Login-Eingabeaufforderung unten. Wie soll cron das umgehen? Wie kann ich debuggen, was los ist?

Danke für die Hilfe.

BEARBEITEN / Follow-up auf @dlebech Antwort: Das Problem besteht nach dem Hinzufügen von alogin: admin Linie zu den Betroffenenurl imapp.yaml. Vor Ort (vonMelden Sie sich als Administrator an und rufen Sie die URL des Handlers in Ihrem Browser auf wie von derURLs für Cron sichern) Alles läuft gut, aber wenn ich es erst einmal implementiert habe, kommt meine App nicht mehr am OAuth2-Dekorator vorbei:

Mit ein paar Fehlernprint Aussagen ...

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')

... Folgendes wird nach der Bereitstellung in meinen GAE-Protokollen angezeigt (die Protokolle werden in der letzten Zeile angehalten, als Nächstes passiert nichts):

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage