5

이 게시물은 How to do OAuth-requiring operations in a GAE Task Queue?의 후속 조치입니다. 이 게시물에 bossylobster 제안, 나는 내 스크립트에 user_id를 하드하려고 않았지만, 크론 작업은 항상 실패GAE cron 작업에서 OAuth가 필요한 작업을 수행하는 방법은 무엇입니까?

  • 내가 할 수 ...이 로그에 트리거되는 것을 볼

    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=... 
    
  • 는 ... 그러나, 항상 실패 (AppEngine에의 크론 채용 섹션에 "실패"빨간색 로 나타난다), 및 작업 큐는 결코 실행하지 않는 작업 대기열 섹션에서 팝업하기로했다.

내가 이해할 수없는 것은 /update을 수동으로 열면 아래의 로그인 프롬프트가 있습니다. cron은 어떻게 우회 하는가? 어떻게 진행되고 있는지 디버깅 할 수 있습니까? 도움을

GAE login prompt

감사합니다. @dlebech 응답에/후속

편집 : 문제는 app.yaml에 관심을 urllogin: admin 라인을 추가 한 후 지속됩니다. 로컬 (에 의해 관리자로 로그인하고 Securing URLs for Cron에서 언급 한 바와 같이 브라우저에 핸들러의 URL을 방문) 모든 것이 잘 간다,하지만 난 배포하면, 내 응용 프로그램은 결코 OAuth2를 데코레이터 과거 얻을 수 없습니다 :

  • 몇 디버그 print 문으로

    ...

    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') 
    
  • 가 ... 여기 내 GAE 로그에 배포 후 볼 것입니다 (로그가 마지막 줄에서 중지, 아무것도 다음에 일어날 없음) :

    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 
    

답변

4

방법 (3210)은 크론은을 우회하도록되어?

은 크론 URL이 login: admin하지 login: required로 구성되어 있는지 확인합니다. Cron 작업은 "로그인 프롬프트를지나갑니다". 자세한 내용은 the documentation을 참조하십시오.

어떻게 진행되고 있는지 디버깅 할 수 있습니까?

cron 작업이 특정 URL에 GET 요청에 의해 시작되기 때문에, 당신은 단지 해당 URL에 GET 요청을하여 작업을 디버깅 할 수 있어야하고, 하나 개발 서버가 무엇이 오류를 참조하거나 참조해야하는지 GET 요청에 대한 로그에 있습니다.

+0

안녕하세요, 'login : admin'을 (를) 알려 주셔서 감사합니다.이 효과가 있었는지 이해하지 못했습니다. 슬프게도 문제는 지속됩니다 (또는 또 다른 문제일까요? 확실하지 않습니다 : - /).내 기존 게시물에 @dlebech 응답 ** 섹션에 ** EDIT/followup을 추가했는데, 어떻게 생각하십니까? –

+0

왜 아직도 oauth_required 데코레이터가 필요합니까? – dragonx

+0

@dragonx 내 앱이 YouTube 재생 목록을 만들고, [OAuth2 dance] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows)를 거쳐야하며,이 데코레이터가 권장/가장 쉬운 방법 인 것 같습니다. 가다. 내가 잘못? –

관련 문제