在本地开发服务器上向GAE TaskQueue添加作业时出现InvalidModuleError。

4
请问有人可以告诉我如何解决以下GAE Python 2.7错误吗?
在我升级GCloud之后,这个问题就开始出现了,但我不明白发生了什么变化。
我的导入代码看起来像这样:
from google.appengine.api import taskqueue 但我看到一些更新的文档将其显示为:
from google.appengine.api.taskqueue import taskqueue 但没有明确的弃用或更改通知,我害怕在事先不理解此问题的情况下进行部署。
File "/Users/dgaedcke/dev/TouchstoneMicroservices/common/async_tasks/push_notify.py", line 49, in registerPush
    taskqueue.add(target='task', queue_name=GAEQ_FOR_PUSH_NOTIFY, url=url, params=params )
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/taskqueue/taskqueue.py", line 2505, in add
    return Task(*args, **kwargs).add(
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/taskqueue/taskqueue.py", line 823, in __init__
    self.__resolve_hostname_and_target()
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/taskqueue/taskqueue.py", line 877, in __resolve_hostname_and_target
    host = self.__host_from_target(self.__target)
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/taskqueue/taskqueue.py", line 957, in __host_from_target
    instance=instance)
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/modules/modules.py", line 459, in get_hostname
    _ResultHook).get_result()
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/modules/modules.py", line 442, in _ResultHook
    _CheckAsyncResult(rpc, mapped_errors, [])
File "/Users/dgaedcke/gcloud_tools/google-cloud-sdk/platform/google_appengine/google/appengine/api/modules/modules.py", line 147, in _CheckAsyncResult
    raise mapped_error()
InvalidModuleError
2个回答

1
@Dewey的评论就是答案。如果您有多个服务,请全部传递给dev_appserver,或者至少将任何发送任务队列任务的服务传递,例如:

dev_appserver.py app.yaml tasks.yaml


0

好的...我找到问题了。 开发服务器启动时没有运行任务队列服务器,所以我猜整个任务队列包都没有添加到google.api包中....

在这种情况下,似乎更好的错误提示会很有用....


你是如何在开发环境中启动任务队列服务器的? - Alexandre Nucera
1
已经有一段时间了,但我相信我包含了一个单独的app.yaml来启动另一个微服务......类似于:dev_appserver.py app.yaml tasks.yaml。 - Dewey
当您运行您所建议的内容时,您没有遇到错误“google.appengine.api.yaml_errors.EventError: 对于类型为AppInfoExternal的对象,属性'queue'是意外的属性。”吗? - Alexandre Nucera
我去看了一下那个项目,想起来我是怎么解决这个问题的,但现在真的记不清了……也许只需要将以下内容添加到您的 app.yaml 文件中即可:
  • url: /_ah/queue/deferred script: google.appengine.ext.deferred.deferred.application login: admin
但我真的不能确定了……
- Dewey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接