如何在GAE cron作业中执行需要OAuth的操作?
问题内容:
这篇文章是
如何在GAE任务队列中执行OAuth要求操作 的后续文章
?
。正如bossylobster在这篇文章中建议的那样,我确实尝试user_id
在脚本中对进行硬编码,但是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=…
-
…但是,它始终会失败(在AppEngine的 Cron Jobs 部分中显示为红色 “ Failed” ),并且应该运行的任务队列也不会在 Task Queues 部分中弹出。
我不明白的是,如果我/update
手动打开,下面将显示登录提示。cron应该如何绕过它?如何调试正在发生的事情?
谢谢您的帮助。
对@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
问题答案:
cron应该如何绕过它?
确保cron网址配置了login: admin
而 不是 login: required
。Cron作业会自动“通过登录提示”。请参阅文档以获取更多信息。
如何调试正在发生的事情?
由于cron作业是通过GET
对特定url的请求启动的,因此您应该能够通过仅GET
对该URL发出请求来调试该作业,并查看开发服务器发生的错误或查看该GET
请求的日志中的内容。