首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CherryPy不会启动

CherryPy不会启动
EN

Stack Overflow用户
提问于 2014-07-05 14:36:58
回答 1查看 4K关注 0票数 1

我在启动CherryPy时遇到了一些困难,我不知道为什么总是会出现这个错误。这是带有日志输出的版本和相关代码。

Python2.7.6 CherryPy 3.5.0 (通过PIP)

代码语言:javascript
复制
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_DIR = os.path.join(CURRENT_DIR, "static")
CONFIG = {
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': STATIC_DIR
    }
}

Daemonizer(cherrypy.engine).subscribe()                         # When we start, do it as a daemon process
cherrypy.config.update({'server.socket_host': '127.0.0.1','server.socket_port': 8080,'log.error_file': 'site.log'})       # Listen on all local IPs (default is 8080)
cherrypy.tree.mount(MyWebServer(), '/', config=CONFIG)          # Mount the app on the root
cherrypy.engine.start()

下面是日志输出:

代码语言:javascript
复制
[05/Jul/2014:10:28:01] ENGINE Bus STARTING
[05/Jul/2014:10:28:01] ENGINE Forking once.
[05/Jul/2014:10:28:01] ENGINE Forking twice.
[05/Jul/2014:10:28:01] ENGINE Daemonized to PID: 21464
[05/Jul/2014:10:28:01] ENGINE Started monitor thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Started monitor thread 'Autoreloader'.
[05/Jul/2014:10:28:01] ENGINE Started monitor thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Started monitor thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Started monitor thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Started monitor thread '_TimeoutMonitor'.
[05/Jul/2014:10:28:01] ENGINE Error in 'start' listener <bound method Server.start of <cherrypy._cpserver.Server object at 0x10cf2d190>>
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/cherrypy/process/wspbus.py", line 205, in publish
    output.append(listener(*args, **kwargs))
  File "/Library/Python/2.7/site-packages/cherrypy/_cpserver.py", line 167, in start
    self.httpserver, self.bind_addr = self.httpserver_from_self()
  File "/Library/Python/2.7/site-packages/cherrypy/_cpserver.py", line 158, in httpserver_from_self
    httpserver = _cpwsgi_server.CPWSGIServer(self)
  File "/Library/Python/2.7/site-packages/cherrypy/_cpwsgi_server.py", line 43, in __init__
    accepted_queue_timeout=self.server_adapter.accepted_queue_timeout,
TypeError: __init__() got an unexpected keyword argument 'accepted_queue_size'

[05/Jul/2014:10:28:01] ENGINE Shutting down due to error in start listener:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/cherrypy/process/wspbus.py", line 243, in start
    self.publish('start')
  File "/Library/Python/2.7/site-packages/cherrypy/process/wspbus.py", line 223, in publish
    raise exc
ChannelFailures: TypeError("__init__() got an unexpected keyword argument 'accepted_queue_size'",)

[05/Jul/2014:10:28:01] ENGINE Bus STOPPING
[05/Jul/2014:10:28:01] ENGINE HTTP Server None already shut down
[05/Jul/2014:10:28:01] ENGINE Stopped thread '_TimeoutMonitor'.
[05/Jul/2014:10:28:01] ENGINE Stopped thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Stopped thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Stopped thread 'Autoreloader'.
[05/Jul/2014:10:28:01] ENGINE Stopped thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Stopped thread 'Monitor'.
[05/Jul/2014:10:28:01] ENGINE Bus STOPPED
[05/Jul/2014:10:28:01] ENGINE Bus EXITING
[05/Jul/2014:10:28:01] ENGINE Bus EXITED
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-05 17:59:23

我猜Daemonizer的存在表明您实际上是在询问CherryPy部署的情况。

首先,cherrypy.engine.start()不足以启动CherryPy。看看cherrypy.quickstart的最小例程。我把它放在__name__ == '__main__'条件下。它允许您直接从shell执行脚本。

其次,您不应该直接在应用程序代码中处理Daemonizer插件(以及PIDFileDropPrivileges等)。有切里,它应该处理系统的东西。

您可以通过static.py运行下面的代码(将cd放入包含的目录中)。它将在前台启动您的应用程序。cherryd -d -i static会将你的应用程序去守护。

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import os

import cherrypy


path   = os.path.abspath(os.path.dirname(__file__))
config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 4
  },
  '/static' : {
    'tools.staticdir.on'  : True,
    'tools.staticdir.dir' : os.path.join(path, 'static')
  }
}

class App:

  @cherrypy.expose
  def index(self):
    return 'Your dynamic stuff'


cherrypy.tree.mount(App(), '/', config)


if __name__ == '__main__':
  cherrypy.engine.signals.subscribe()
  cherrypy.engine.start()
  cherrypy.engine.block()

几年前,我编写了一个完整的CherryPy部署教程cherrypy-webapp-骨架。如果你需要一张完整的照片,请看一看。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24587472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档