CherryPy Hello World 错误
题
当我运行 CherryPy Hello World 时:
import cherrypy
class HelloWorld:
def index(self):
return "Hello world!"
index.exposed = True
cherrypy.config.update({'server.socket_port': 8080,})
cherrypy.quickstart(HelloWorld())
...我明白了:IO错误:端口 8080 未绑定在“localhost”上。会是什么呢?
解决方案
其他提示
如果你想在Heroku上,在那里你不能使用回环来检查您是否已经真正打开一个端口,那么你需要简单地禁用CherryPy的wait_for_occupied_port()
功能,使CherryPy的自我一致性检查并不能决定它部署的CherryPy有,事实上,启动失败。下面是我使用固定的CherryPy的三条线使得它运行在Heroku:
from cherrypy.process import servers
def fake_wait_for_occupied_port(host, port): return
servers.wait_for_occupied_port = fake_wait_for_occupied_port
我昨天就遇到了这个问题的Ubuntu Linux操作系统的服务器上。我花了几个小时试图在我意识到之前的错误信息是非常通用的追查在CherryPy的代码的bug。它将给这个错误消息,即使该主机不自己去哪个服务器尝试绑定的IP地址。在我的情况下,环回接口(LO,127.0.0.1)被禁用。因此,即使我设置server.socket_host='0.0.0.0'
,试图检查端口,wait_for_occupied_port
,会失败(因为它假定,合理,Loopback接口始终可用)。重新启用环回接口后,CherryPy的服务器将正常启动。
更新:CherryPy的3.2.3对这一特定问题的修复程序。直到3.2.3发布,开发版本都可以在 CherryPy的项目下载。
- 在不同端口上使用它(例如8000)
- 阅读 配置接口 (再次)
- 尝试最新版本而不是3.0
- 这也可能是由某些 Windows 防火墙(Eset smart security 或其他防火墙)引起的。所以只需在不同的端口上使用它即可。
我想我也有类似的问题,当我开始使用CherryPy的......但是我不记得究竟是什么......但是使用配置文件,而不是通过手工传递CONFIGS参与修复:
MyProj.conf:
[global] server.socket_host = "127.0.0.1" server.socket_port = 8080 server.thread_pool = 10
MyProj.py
import os
import cherrypy
class HelloWorld:
def index(self):
return "Hello world!"
index.exposed = True
# Assumes the config file is in the directory as the source.
conf_path = os.path.dirname(os.path.abspath(__file__))
conf_path = os.path.join(conf_path, "MyProj.conf")
cherrypy.config.update(conf_path)
cherrypy.quickstart(HelloWorld())
这绝对是在这里工作。结果
我使用Python 2.6.1和3.1.1的CherryPy和我运行-W ignore
脚本:
c:\My_path> python -W ignore MyProj.py
如果你是下* nix中,你应该把在-W ignore
注释#!
在文件的顶部。
如果您使用的是OS X,尝试调用:
sudo lsof -i :8080
这将使用该端口告诉你的过程。
AVG反病毒软件对我来说是导致此问题。卸载AVG(很不理想)的伎俩。我怀疑链接扫描器,我不能禁用。
我使用Python 3.3的Win7我的电脑上运行的CherryPy 3.2.2当有同样的问题 服务器通常会开始,然后将崩溃在大约几分钟。
我已经从施加所述的CherryPy 补丁 3.2.3劳亚提及。但它并没有帮助。
所以我不得不注释掉在python\Lib\site-packages\cherrypy\process\servers.py
的尽头提高误差线,以防止服务器从垂死的:
...
# if host == client_host(host):
# raise IOError("Port %r not bound on %r" % (port, host))
...