5

Bài đăng này là bản theo dõi cho How to do OAuth-requiring operations in a GAE Task Queue?. Theo đề nghị của bossylobster trong bài viết này, tôi đã cố gắng để hardcode user_id trong kịch bản của tôi, nhưng nhiệm vụ cron luôn thất bại:Làm cách nào để thực hiện các thao tác yêu cầu OAuth trong một công việc cron GAE?

  • tôi có thể nhìn thấy nó được kích hoạt trong các bản ghi ...

    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=... 
    
  • ... tuy nhiên, nó luôn luôn thất bại (xuất hiện như đỏ "không" trong phần Cron Jobs AppEngine), và hàng đợi nhiệm vụ đó là nghĩa vụ để chạy không bao giờ bật lên trong phần công tác Queues.

Điều tôi không hiểu là nếu tôi mở /update theo cách thủ công, tôi có lời nhắc đăng nhập bên dưới. Làm thế nào là cron nghĩa vụ phải bỏ qua điều đó? Làm thế nào tôi có thể gỡ lỗi những gì đang xảy ra?

GAE login prompt

Cảm ơn sự trợ giúp.

EDIT/followup về @dlebech câu trả lời: Vấn đề vẫn tồn tại sau khi thêm một dòng login: admin đến lo ngại url trong app.yaml. Tại địa phương (bởi đăng nhập như một quản trị viên và quý khách đến thăm URL của trình xử lý trong trình duyệt của bạn như đã đề cập bởi Securing URLs for Cron) mọi thứ diễn ra tốt đẹp, nhưng một khi tôi triển khai, ứng dụng của tôi không bao giờ được quá khứ trang trí OAuth2:

  • với một vài debug print báo cáo ...

    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') 
    
  • ... đây là những gì tôi thấy sau khi triển khai trong nhật ký GAE tôi (các bản ghi dừng lại ở dòng cuối cùng, không có gì xảy ra tiếp theo):

    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 
    

Trả lời

4

Cron phải bỏ qua điều đó như thế nào?

Hãy chắc chắn rằng các url cron được cấu hình với login: adminkhônglogin: required. Công việc Cron "tự động nhận lời nhắc đăng nhập". Xem the documentation để biết thêm thông tin.

Làm cách nào để gỡ lỗi những gì đang diễn ra?

Kể từ khi một công việc định kỳ được bắt đầu bởi một yêu cầu GET đến một url cụ thể, bạn sẽ có thể để gỡ lỗi công việc bằng cách chỉ thực hiện một yêu cầu GET để url và một trong hai xem những gì các lỗi máy chủ phát triển làm hoặc xem những gì nằm trong nhật ký cho yêu cầu GET.

+0

Xin chào, cảm ơn vì đã chỉ cho tôi về phía 'login: admin', tôi không hiểu rằng nó có hiệu ứng này. Đáng buồn thay, vấn đề vẫn tồn tại (hoặc có thể là một vấn đề khác? Tôi không chắc chắn: - /).Tôi đã thêm một ** EDIT/followup trên phần trả lời @dlebech ** vào bài đăng gốc của tôi, bạn nghĩ sao? –

+0

Tại sao bạn vẫn cần trang trí oauth_required? – dragonx

+0

@dragonx ứng dụng của tôi tạo danh sách phát trên YouTube, ứng dụng cần phải trải qua [điệu nhảy OAuth2] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows) và trình trang trí này có vẻ là cách được đề xuất/dễ nhất đi. Liệu tôi có sai? –

Các vấn đề liên quan