如何在代理后面使用GAE 1.7.7的任务队列

时间:2013-04-23 15:39:19

标签: google-app-engine

我今天升级到GAE 1.7.7并发现任务队列停止了我的开发设置。

我在我的开发环境中使用https,通过nginx设置代理来自fakedomain.local:80和fakedomain.local:443到localhost:8080(GAE监听)的连接。

通过此设置,最终会创建任务队列以在fakedomain.local:80执行。这曾经起作用,因为请求将由nginx获取,但开发服务器的1.7.7版本似乎有一个端口注册表,除非端口已知(如果我理解google.appengine),它将不会提供请求。 tools.devappserver2.Dispatcher._resolve_target正确)。当然,GAE侦听端口8080,我的任务标记为在fakedomain.local上运行:80永远不会执行(GAE记录此错误:在队列中发送任务“task1”(Url:“...”)时发生错误...)。

我尝试修补dispatcher.py:577,因此当端口未知时,它不会引发ServerDoesNotExistError,而只会使用默认服务器。通过这个修改,我可以让任务队列再次运行,但我宁愿使用一个不涉及改变GAE代码的解决方案。

如何在版本1.7.7中使GAE注册端口80和443?或者,有没有办法可以为任务指定完整的目标URL? (即fakedomain.local:8080 / my_task,而不仅仅是/ mytask)。

1 个答案:

答案 0 :(得分:0)

taskqueue.add(target=taskqueue.DEFAULT_APP_VERSION, ...) 将在您的默认应用上运行它,这应该完全符合您的要求。

taskqueue.DEFAULT_APP_VERSION => app_identity.get_default_version_hostname() => environ['DEFAULT_VERSION_HOSTNAME'] => '%s:%s' % (environ['SERVER_NAME'], server_port)