突然将appengine devmode任务请求拒绝到0.0.0.0

更新 :当我为我的项目禁用GWT时,这个问题就消失了!

我已经愉快地在appengine中使用任务队列好几个月了,开发模式测试在我的Mac OS X机器上很棒。

今天,一切都崩溃了。

[ERROR] Job CleanupQueue.task1 threw an unhandled Exception: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:381) at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:480) at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77) at org.quartz.core.JobRunShell.run(JobRunShell.java:203) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520) [ERROR] Job (CleanupQueue.task1 threw an exception. org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused] at org.quartz.core.JobRunShell.run(JobRunShell.java:214) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520) * Nested Exception (Underlying Cause) --------------- com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:381) at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:480) at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77) at org.quartz.core.JobRunShell.run(JobRunShell.java:203) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520) 

我没有改变我的项目中的任何内容,并且恢复到以前工作的版本没有帮助。 0.0.0.0是来自开发服务器的内部IP – 我的所有其他引用都使用localhost或127.0.0.1。 我最近安装了Apple的一些操作系统更新,但我会发誓开发模式在当时和现在都有效。

我在哪里可以开始寻找原因? 谢谢你的任何想法 – 我很难过!

注意:我的Windows机器上的相同代码和设置工作得很好。

注2:从头开始使用GAE java sdk 1.5.5,我制作了最简单的taskqueue示例应用程序并获得了相同的连接拒绝消息。

额外信息

使用ifconfig:

 lo0: flags=8049 mtu 16384 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 inet 127.0.0.1 netmask 0xff000000 gif0: flags=8010 mtu 1280 stf0: flags=0 mtu 1280 en0: flags=8863 mtu 1500 ether c8:2a:14:0d:d8:e8 inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255 media: autoselect (none) status: inactive fw0: flags=8863 mtu 4078 lladdr 70:cd:60:ff:fe:6a:28:ae media: autoselect  status: inactive en1: flags=8863 mtu 1500 ether 78:ca:39:b4:c3:8a inet6 fe80::7aca:39ff:feb4:c38a%en1 prefixlen 64 scopeid 0x6 inet 192.168.2.3 netmask 0xffffff00 broadcast 192.168.2.255 media: autoselect status: active 

我没有看到这个问题(运行Python SDK,任务在我们的MacOS X环境中本地工作),但您是否尝试过切换来监听所有IP?

在启动程序的额外标志中传递–address 0.0.0.0应该绑定到a​​ll并允许您使用localhost或您的实际IP。 当然,这不应该是必需的,但是你可以尝试作为实验。

您是否将明确的目标传递给任务? 您的应用是否在非默认端口8888上运行?

ifconfig的输出是什么样的? 是否有任何虚拟适配器或其他网络设备在这种情况发生变化时发生了变化?

您不应该使用0.0.0.0作为连接目标。 0.0.0.0具有特殊含义:它指的是所有IP地址(想象它是…… *。*)。 这通常在将侦听套接字绑定到所有可用接口时使用。

因此,即使侦听套接字绑定到0.0.0.0,也不应该使用相同的ip来连接它。 通常,您可以连接到环回IP 127.0.0.1或您的活动公共IP(在win中检查ipconfig或在linux中检查ifconfig)。

不同的应用程序和操作系统可以以不同的连接目标处理0.0.0.0。 这可以解释为什么它在您的Firefox中有效。

0.0.0.0是一种特殊的地址。 在此上下文中,它表示“本地计算机上的所有IP地址(IPv4)”。 因此,如果您的appengine正在侦听端口8888,这意味着它已绑定到所有可用的IP地址。 因此,从您的配置中,它应该可以在localhost( 127.0.0.1:8888 ), 192.168.2.1:8888192.168.2.3:8888上访问 。 您可以validation尝试类似:

 telnet 192.168.2.1 8888 

首先,您不应该将其作为IP地址传递。

如果您在服务器运行时有权访问: http:// localhost:8888 / _ah / admin / ,那么检查一下会很有趣。

从appengine的版本> = 2.0.1开始,devmode的默认行为是它将仅绑定到localhost。 为了绑定或所有可用的IPv4地址(又名0.0.0.0),你必须指定-bindAddress 0.0.0.0,或者如果它被某些预定义配置的程序自动监视,例如Eclipse。 如果你检查你的Eclipse Run配置 – 参数 – 程序参数,如果你从Eclipse运行它可能会有用,这引导我们进入下一个问题。 你如何启动应用程序引擎? 有两种选择并注意到

“当你使用Eclipse的Eclipse插件从Eclipse中启动开发服务器时,服务器默认使用端口8888。当你使用dev_appserver命令启动服务器时,它默认使用端口8080。

您提到您已完成操作系统的升级。 我发现此问题与JDK更新有关,但讨论的版本是Java SE 6 Update 4 。 我认为值得在此提及。 另外我们应该假设,在更新之后, 没有防火墙升级使其自动启动,对吧?

我还建议在ant-macros.xml中检查你的配置,看看有什么值:

   

我解决了这个问题。

从eclipse启动GWT和GAE项目的类是com.google.appengine.tools.development.gwt.AppEngineLauncher 。 这个类硬编码0.0.0.0作为要绑定的IP,根据注释应该使它在所有接口上监听。

我刚刚将此类中的代码复制到AppEngineLauncherHack类中,该类对更具体的IP(在我的情况下为192.168.0.12 )进行硬编码,并将我的运行配置更改为使用此类。

我还没弄清楚最终的冲突是什么。 我不知道为什么0.0.0.0曾经工作过,但现在不行了。 不满意,肯定是一个kluge – 如果这开始在其他机器上发生,我们将不得不为每台计算机制作一个新的AELauncherHack类! 但至少现在我们可以恢复生意了。

感谢大家的帮助 – 对不起,我只能奖励一个人!