【问题标题】:Apps won't run on GAE - 'unable to bind to localhost:0'应用程序无法在 GAE 上运行 - “无法绑定到 localhost:0”
【发布时间】:2013-04-05 19:02:51
【问题描述】:

我最近将 Google App Engine 升级到了 1.7.7。并且从那以后一直无法在本地运行任何应用程序。这包括在更新之前工作的应用程序和我此后创建的应用程序。我没有遇到任何其他关于这个特定问题“无法绑定到 localhost:0”的引用,因此非常感谢您对清除这个障碍的任何见解。

我今天添加了一个新的“Hello World”应用程序的日志。在 OS X 10.6.8 上通过 ActivePython 使用 Python 2.7。

*** Running dev_appserver with the following flags:
    --skip_sdk_update_check=yes --port=12084 --admin_port=8007
Python command: /usr/local/bin/pythonw
INFO     2013-04-13 06:37:31,627 devappserver2.py:498] Skipping SDK update check.
WARNING  2013-04-13 06:37:31,691 api_server.py:328] Could not initialize images API; you are likely missing the Python "PIL" module.
WARNING  2013-04-13 06:37:31,692 simple_search_stub.py:977] Could not read search indexes from /var/folders/ag/ag25hkLMFEG1p0pLBBX5Mk+++TI/-Tmp-/appengine.binderror.b/search_indexes
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/dev_appserver.py", line 193, in <module>
    _run_file(__file__, globals())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/dev_appserver.py", line 189, in _run_file
    execfile(script_path, globals_)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 662, in <module>
    main()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 655, in main
    dev_server.start(options)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 626, in start
    apis.start()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 151, in start
    super(APIServer, self).start()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 296, in start
    raise BindError('Unable to bind %s:%s' % self.bind_addr)
google.appengine.tools.devappserver2.wsgi_server.BindError: Unable to bind localhost:0

更新:我能够通过 GAE 启动器部署“Hello World”应用程序而没有任何问题。我运行了命令errinfo -c -n GoogleAppEngineLauncher.app,它使用了包含的dtrace,然后尝试运行三个应用程序,然后关闭它们。这是输出[这有点超出我的理解]:

           EXEC          SYSCALL  ERR  COUNT  DESC
 GoogleAppEngine          madvise   12      1  Cannot allocate memory 
 GoogleAppEngine __disable_threadsignal    0      2 
 GoogleAppEngine           access    0      3 
 GoogleAppEngine bsdthread_register   22      3  Invalid argument 
 GoogleAppEngine            chdir    0      3 
 GoogleAppEngine   close_nocancel    0      3 
 GoogleAppEngine   fcntl_nocancel    0      3 
 GoogleAppEngine             fork    0      3 
 GoogleAppEngine    getdtablesize    0      3 
 GoogleAppEngine           getpid    0      3 
 GoogleAppEngine    open_nocancel    0      3 
 GoogleAppEngine           setsid    0      3 
 GoogleAppEngine      sigprocmask    0      3 
 GoogleAppEngine           stat64    0      3 
 GoogleAppEngine            wait4    0      3 
 GoogleAppEngine       workq_open    0      3 
 GoogleAppEngine            write    0      3 
 GoogleAppEngine          lstat64    0      4 
 GoogleAppEngine             pipe    0      6 
 GoogleAppEngine    thread_selfid    0      6 
 GoogleAppEngine     gettimeofday    0      7 
 GoogleAppEngine             dup2    0      9 
 GoogleAppEngine          madvise    0     17 
 GoogleAppEngine           munmap    0     31 
 GoogleAppEngine             mmap    0     33 
 GoogleAppEngine        sigaction    0     87 
 GoogleAppEngine      getattrlist    0    102 
 GoogleAppEngine          fstat64    0    118 
 GoogleAppEngine             open    0    118 
 GoogleAppEngine          geteuid    0    208 
 GoogleAppEngine              dup    0  10418 
 GoogleAppEngine             read    0  10532 
 GoogleAppEngine            close    0  10584 
 GoogleAppEngine workq_kernreturn    0  20752 
 GoogleAppEngine            close    9  21459  Bad file descriptor 
 GoogleAppEngine           kevent    0  72543 

8 月 16 日第 2 次更新:我安装了最新版本的 GAE Launcher [1.8.3],现在一切正常。

【问题讨论】:

  • 尝试使用strace 来查看来自bind 的实际errno 是什么,因为GAE 太粗鲁,无法打印出来。
  • 您可能还想检查一下是否有东西已经在您选择的端口上侦听。特别是 12084
  • @BenJackson 我将(最终)安装strace 并试一试——tar.gz 现在给我带来了麻烦。 @TimHoffman 除非我做错了,否则该端口上没有任何监听。我使用了lsof 命令。
  • 你最终是如何运行 helloworld 应用程序的?
  • @Zyoo,我能够使用 Launcher 将 helloworld 应用程序发送到 Google App Engine 服务器并可以在线查看它。仍然无法在本地测试。

标签: python google-app-engine


【解决方案1】:

您的套接字已在使用中。杀死它,它应该得到解决。fuser -k 8080/tcp

例如上面的代码在 8080 处杀死并释放套接字

【讨论】:

  • 将-k 用于fuser 给我一个错误 - 系统说这不是一个选项。
  • 遇到了同样的问题,这对我有用。还可以尝试关闭任何其他正在运行的 GAE 本地服务器,以及浏览器中的任何 GAE 管理控制台选项卡
【解决方案2】:

在启动服务器时添加--port NUMBER的另一个端口进行测试。

【讨论】:

  • 我在启动服务器时尝试使用不同的端口号,并收到相同的错误。
  • 您是否只使用 appengine 运行一个应用程序?如果我运行我的应用 X 并尝试运行应用 Y,即使在另一个端口中,它也会返回“google.appengine.tools.devappserver2.wsgi_server.BindError: Unable to bind localhost:8000”。
  • 不幸的是,我得到了同样的错误,即使只运行一个应用程序。我想我必须卸载这个版本,然后重新安装一个较早的版本。
  • 您是否尝试在没有启动器的情况下仅在终端中运行?
  • 我已经尝试在终端中运行其中的一些并得到这个错误的变化:Remnants:two-two-test b$ dev_appserver.py main.py ...raise yaml_errors.EventListenerYAMLError(e) google.appengine.api.yaml_errors.EventListenerYAMLError: mapping values are not allowed here in "main.py", line 35, column 22 其中第 35 行是 def render(self, template, **kw):,第 22 列是 self, 和 @ 之间的空格987654324@.
【解决方案3】:

有同样的问题,实际上也试图用 GUI 运行服务器。在 GUI 中停止它,完美运行。

【讨论】:

    【解决方案4】:

    Ubuntu 14.04 有一个名为“webfs”的轻量级服务器在 localhost:8000 上侦听。运行-sudo netstat -taupen | grep ":8000" - 在终端中确认。如果它正在监听运行 - sudo killall -q /usr/bin/webfsd - 杀死它。 GAE 使用端口 8000 和 8080,如果其中一个或两个都忙,则不会启动。 经过反思,webfs 守护进程也可以作为服务打开和关闭:sudo service webfs start/stop。但是,由于这两种方法都需要 root 权限,因此它们不容易自动化。 当我从命令行本地启动 appengine 时,只需在启动时将管理端口从 8000 更改为 8001 证明是一种更深思熟虑的方法。我的命令行如下所示:google_appengine/dev_appserver.py --admin_port 8001 projects/helloworld/

    【讨论】:

      【解决方案5】:

      上次运行应用引擎命令时,您使用ctrl-z 关闭它(分流到后台)而不是ctrl-c(杀死)。重启终端,下次你从终端关闭应用引擎时使用ctrl-c,你会没事的。

      【讨论】:

        【解决方案6】:

        对于在运行fuser -k 8080/tcp 时获得Unknown key 的人,这里有一个对我有用的解决方案:

        lsof -P | grep ':8080' | awk '{print $2}' | xargs kill -9
        

        【讨论】:

        • 对我不起作用。我认为它在执行 grep 时没有找到任何东西。
        • 在fuser -k 命令不起作用之后,这对我有用!谢谢!
        【解决方案7】:

        由于未知选项,fuser -k 命令对我不起作用,我这样做了。

        通过“sudo lsof -i -n -P | grep TCP”查看哪个进程正在使用该端口。我记下了进程 ID,并通过 Activity Monitor(在 Network 选项卡中)将其退出。

        【讨论】:

        • 谢谢你。完美运行。
        猜你喜欢
        • 1970-01-01
        • 2019-11-24
        • 2019-11-17
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多