Cherrypy服务器除localhost外无法使用

时间:2009-10-12 15:46:02

标签: python cherrypy

我遇到了一个看起来已经解决但却无法解决问题的问题。我只能绑定localhost或127.0.0.1。 Windows XP Home和Mac OS X(linux未经测试),cherrypy 3.1.2,python 2.5.4。这是我的应用程序的结束:

global_conf = {
       'global':    { 'server.environment= "production"'
                      'engine.autoreload_on : True'
                      'engine.autoreload_frequency = 5 '
                      'server.socket_host': '0.0.0.0',
                      'server.socket_port': 8080}
    }
cherrypy.config.update(global_conf)
cherrypy.tree.mount(home, '/', config = application_conf)
cherrypy.engine.start()

2 个答案:

答案 0 :(得分:6)

是的,你的dict做错了什么:

>>> global_conf = {
...        'global':    { 'server.environment= "production"'
...                       'engine.autoreload_on : True'
...                       'engine.autoreload_frequency = 5 '
...                       'server.socket_host': '0.0.0.0',
...                       'server.socket_port': 8080}
...     }
>>> print global_conf
{'global': 
   {'server.environment= "production"engine.autoreload_on : Trueengine.autoreload_frequency = 5 server.socket_host': '0.0.0.0',
    'server.socket_port': 8080}
}

更具体地说,你的dict definiton中缺少逗号和冒号。每个键/值对必须有一个冒号,并用逗号分隔。这样的事情可能有用:

global_conf = {
       'global':    { 'server.environment': 'production',
                      'engine.autoreload_on': True,
                      'engine.autoreload_frequency': 5,
                      'server.socket_host': '0.0.0.0',
                      'server.socket_port': 8080,
                    }
              }

检查python dictionary documentation以获取更多信息。

答案 1 :(得分:3)

如果您使用的是双栈操作系统,则localhost可能会解析为:: 1(IPv6 localhost)而不是127.0.0.1(IPv4 localhost)。尝试使用http://127.0.0.1:8080访问服务器。

此外,如果您正在使用支持双栈的操作系统,则可以将server.socket_host设置为“::”,它将侦听IPv6和IPv4中的所有地址。