5

Этот пост является дополнением к How to do OAuth-requiring operations in a GAE Task Queue?. Как было предложено bossylobster в этой должности, я стараюсь жёстко в user_id в моем сценарии, но задача хрон всегда терпит неудачу:Как выполнять операции, требующие OAuth, в задании GAE cron?

  • я могу видеть, что это срабатывает в журналах ...

    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=... 
    
  • ... однако, он всегда терпит неудачу (показывает, как красный «Failed» в Cron Jobs разделе Appengine в), и очереди задач он должен не бежать и не всплывает в разделе задач очереди.

Что я не понимаю, так это если я открою /update вручную У меня есть приглашение для входа в систему ниже. Как cron должен обходить это? Как я могу отладить, что происходит?

GAE login prompt

Спасибо за помощь.

EDIT/Followup на @dlebech ответ: Проблема сохраняется после добавления login: admin линии к соответствующему url в app.yaml. Локально (по подписания в качестве администратора и посещение URL обработчика в браузере, как указано в Securing URLs for Cron) все идет хорошо, но когда я раскрываю мое приложение никогда не получает мимо 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

Как хроны должны обойти это?

Убедитесь, что хрон URL сконфигурирован с login: admin и неlogin: required. Задачи Cron «пропустит приглашение для входа» автоматически. См. the documentation для получения дополнительной информации.

Как я могу отладить, что происходит?

Поскольку хроны запускаются с помощью GET запроса на определенный URL, вы должны быть в состоянии отладить работу, просто делая GET запрос на этот адрес и либо увидеть, какие ошибки делает сервер разработки или увидеть, что находится в журналах для запроса GET.

+0

Привет, спасибо, что указал мне на «login: admin», я не понял, что это имело этот эффект. К сожалению, проблема сохраняется (или, может быть, это еще одна? Я не уверен: - /).Я добавил ** EDIT/followup on @dlebech answer ** в мой оригинальный пост, что вы думаете? –

+0

Зачем вам нужен декор oauth_required? – dragonx

+0

@dragonx мое приложение создает плейлисты YouTube, ему нужно пройти [OAuth2 dance] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows), и этот декоратор кажется рекомендуемым/простым способом идти. Я ошибаюсь? –

Смежные вопросы