2014-07-05 4 views
1

J'ai des problèmes pour démarrer CherryPy et je n'arrive pas à comprendre pourquoi je reçois cette erreur. Voici les versions et le code associé avec la sortie du journal.CherryPy ne démarre pas

Python 2.7.6 CherryPy 3.5.0 (via PIP)

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() 

est ici la sortie du journal:

[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 

Répondre

3

Je suppose que la présence Daemonizer indique que vous demande vraiment de CherryPy déploiement.

Tout d'abord, cherrypy.engine.start() ne suffit pas pour démarrer CherryPy. Jetez un oeil à cherrypy.quickstart pour la routine minimale. Je l'ai mis sous __name__ == '__main__' condition. Cela vous permet d'exécuter directement le script depuis le shell. Deuxièmement, vous ne devriez probablement pas traiter Daemonizer plugin (et PIDFile, DropPrivileges, etc) directement dans votre code d'application. Il y a cherryd qui devrait traiter des choses du système.

Vous pouvez exécuter le code ci-dessous (mettre static.py, cd dans le répertoire contenant) par cherryd -i static. Il va commencer votre application à l'avant-plan. cherryd -d -i static va démoniser votre application.

#!/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() 

j'ai écrit un tutoriel de déploiement complet CherryPy, cherrypy-webapp-skeleton, il y a quelques années. Jetez un coup d'oeil si vous avez besoin d'une image complète.

+0

Cela semble avoir fonctionné comme un charme. Bien que, pour une raison ou une autre, Cherryd n'ait pas été installé lorsque j'ai installé Cherrypy via pip, je l'ai simplement récupéré dans votre repo Google Code :). –