Ten wpis jest kontynuacją do How to do OAuth-requiring operations in a GAE Task Queue?. Jak sugeruje bossylobster w tym poście, ja staram się hardcode user_id
w moim skryptu, ale zadanie cron zawsze kończy się niepowodzeniem:Jak wykonać operacje wymagające OAuth w pracy cron GAE?
widzę to jest wyzwalane w dziennikach ...
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=...
- ... jednak to nie zawsze (pokazuje się jako czerwone „Failed” w Cron Jobs sekcji AppEngine za), a kolejka zadanie to powinno nigdy uruchomić wyskakuje w sekcji zadanie kolejek.
Nie rozumiem, że jeśli ręcznie otworzę /update
, otrzymam poniższy formularz logowania. W jaki sposób Cron ma to ominąć? Jak mogę debugować, co się dzieje?
Dzięki za pomoc.
EDIT/nawiązanie na @dlebech odpowiedź: problem nie ustąpi po dodaniu login: admin
linię do danego url
w app.yaml
. Lokalnie (przez podpisując się jako administrator i odwiedzenie URL obsługi w przeglądarce jak wspomniano przez Securing URLs for Cron) wszystko idzie dobrze, ale gdy wdrożyć, moja aplikacja nie umknie dekoratora OAuth2:
z kilkoma debug
print
sprawozdania ...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')
... oto co widzę po wdrożeniu w moich dziennikach GAE (dzienniki zatrzymuje się na ostatniej linii, nic się nie dzieje obok):
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
Cześć, dziękuję za skierowanie mnie w stronę 'login: admin', nie zrozumiałem, że miało to taki efekt. Niestety, problem utrzymuje się (a może to kolejny? Nie jestem pewien: - /).Dodałem dział ** EDYCJA/uzupełnienie w sekcji @dotbech odpowiedzi ** do mojego oryginalnego posta, co o tym sądzisz? –
Dlaczego nadal potrzebujesz dekoratora oauth_required? – dragonx
@dragonx Moja aplikacja tworzy listy odtwarzania YouTube, musi przejść przez [taniec OAuth2] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows), a ten dekorator wydaje się być zalecanym/najprostszym sposobem iść. Czy się mylę? –