CherryPy: Créer un service Web derrière apache2 (mod_wsgi)

Je suis nouveau sur cherrypy et je le choisis pour créer des services Web à utiliser dans d’autres applications Web. Je veux l’exécuter en utilisant apache2 et mod_wsgi. J’ai suivi la documentation plutôt ancienne et l’exemple mondial de bonjour a très bien fonctionné.

Je suis en train de regarder les terrains et bien sûr le tutoriel REST . Cependant, je ne peux pas le faire fonctionner. J’obtiens le statut 500 et une erreur dans le journal apache:

TypeError: expose_() missing 1 required positional argument: 'func' 

Pour aller aussi loin, j’ai ajusté le script du tutoriel de façon similaire à l’exemple de hello world pour travailler avec apache:

 import sys sys.stdout = sys.stderr import random import ssortingng import cherrypy cherrypy.config.update({'environment': 'embedded'}) @cherrypy.expose class SsortingngGeneratorWebService(object): @cherrypy.tools.accept(media='text/plain') def GET(self): return cherrypy.session['myssortingng'] def POST(self, length=8): some_ssortingng = ''.join(random.sample(ssortingng.hexdigits, int(length))) cherrypy.session['myssortingng'] = some_ssortingng return some_ssortingng def PUT(self, another_ssortingng): cherrypy.session['myssortingng'] = another_ssortingng def DELETE(self): cherrypy.session.pop('myssortingng', None) conf = { '/': { 'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 'tools.sessions.on': True, 'tools.response_headers.on': True, 'tools.response_headers.headers': [('Content-Type', 'text/plain')], } } cherrypy.quickstart(SsortingngGeneratorWebService(), '/', conf) 

Qu’est-ce que je fais mal?

Question 1:

 TypeError: expose_() missing 1 required positional argument: 'func' 

a été causée par le fait que j’utilise anaconda python et que la version de cherrypy installée avec conda install cherrypy est obsolète (3.8.0). Suppression de cette version et installation de la dernière version avec pip résolu ce problème.

Numéro 2:

Mauvais routage

 cherrypy.quickstart(SsortingngGeneratorWebService(), '/', conf) 

devrait être

 cherrypy.Application(SsortingngGeneratorWebService(), script_name=None, config=conf) 

il suffit alors d’entrer le chemin d’access à votre fichier de script.

Numéro 3:

Les sessions cherrypy sont par défaut en mémoire et cela ne joue pas bien avec mod_wsgi. Vous devez utiliser le magasin de fichiers pour la session, par exemple. ajuster la configuration:

 conf = { '/': { 'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 'tools.sessions.on': True, 'tools.sessions.storage_type': 'file', 'tools.sessions.storage_path': '/path/to/sessions', # in case of 500 error check privileges of session folder!!! 'tools.response_headers.on': True, 'tools.response_headers.headers': [('Content-Type', 'text/plain')] } 

}