Question

J'ai une petite application web Python en utilisant le cadre CherryPy. Je ne suis pas un expert dans les serveurs web.

Je suis CherryPy travailler avec Apache en utilisant mod_python sur notre serveur Ubuntu. Cette fois, cependant, je dois utiliser Windows 2003 et IIS 6.0 pour héberger mon site.

Le site fonctionne parfaitement en tant que serveur autonome - je suis tellement perdu quand il s'agit d'obtenir IIS en cours d'exécution. J'ai passé la dernière journée googler et essayer aveuglément tout et tout pour obtenir cette course.

J'ai tous les différents outils installés que les sites Web me ont dit à (Python 2.6, CherrpyPy 3, ISAPI-WSGI, pywin32) et ont lu toute la documentation que je peux. Ce blog a été le plus utile:

http://whatschrisdoing.com/blog/ 2008/07/10 / Turbogears-ISAPI-wsgi-iis /

Mais je suis toujours perdu à ce que je dois exécuter mon site. Je ne peux pas trouver des exemples complets ou how-to de même commencer. J'espère que quelqu'un ici peut aider!

Vive.

Était-ce utile?

La solution 2

OK, je l'ai travail. Merci à Jason et son aide. Je devais appeler

cherrypy.config.update({
  'tools.sessions.on': True
})
return cherrypy.tree.mount(Root(), '/', config=path_to_config)

J'ai eu ce dans le fichier de configuration sous [/] mais pour une raison quelconque, il n'a pas comme ça. Maintenant, je peux obtenir mon application web et la course - alors je pense que je vais essayer de comprendre pourquoi il a besoin de cette mise à jour de configuration et n'aime pas le fichier config je ...

Autres conseils

Je lance CherryPy derrière mes sites IIS. Il y a plusieurs astuces pour le faire fonctionner.

  1. Lors de l'exécution comme l'identité de processus de travail IIS, vous n'aurez pas les mêmes autorisations que vous faites lorsque vous exécutez le site à partir de votre processus utilisateur. Les choses vont se briser. En particulier, tout ce qui veut écrire dans le système de fichiers ne fonctionnera probablement pas sans quelques ajustements.
  2. Si vous utilisez setuptools, vous voulez probablement installer vos composants avec l'option -Z (décompresse tous les œufs).
  3. Utilisez win32traceutil pour traquer les problèmes. Assurez-vous que dans votre script hook que vous importez win32traceutil. Ensuite, lorsque vous tentez d'accéder au site Web, si quelque chose va mal, assurez-vous qu'il est imprimé à la sortie standard, il va journalisés à l'utilitaire de trace. Utilisez 'python -m win32traceutil' pour voir la sortie de la trace.

Il est important de comprendre le processus de base pour obtenir un fonctionnement de l'application ISAPI. Je suggère d'abord obtenir une application WSGI bonjour monde fonctionnant sous ISAPI_WSGI. Voici une première version d'un script hook j'ai utilisé pour valider que je devenais CherryPy travailler avec mon serveur web.

#!python

"""
Things to remember:
easy_install munges permissions on zip eggs.
anything that's installed in a user folder (i.e. setup develop) will probably not work.
There may still exist an issue with static files.
"""


import sys
import os
import isapi_wsgi

# change this to '/myapp' to have the site installed to only a virtual
#  directory of the site.
site_root = '/'

if hasattr(sys, "isapidllhandle"):
    import win32traceutil

appdir = os.path.dirname(__file__)
egg_cache = os.path.join(appdir, 'egg-tmp')
if not os.path.exists(egg_cache):
    os.makedirs(egg_cache)
os.environ['PYTHON_EGG_CACHE'] = egg_cache
os.chdir(appdir)

import cherrypy
import traceback

class Root(object):
    @cherrypy.expose
    def index(self):
        return 'Hai Werld'

def setup_application():
    print "starting cherrypy application server"
    #app_root = os.path.dirname(__file__)
    #sys.path.append(app_root)
    app = cherrypy.tree.mount(Root(), site_root)
    print "successfully set up the application"
    return app

def __ExtensionFactory__():
    "The entry point for when the ISAPIDLL is triggered"
    try:
        # import the wsgi app creator
        app = setup_application()
        return isapi_wsgi.ISAPISimpleHandler(app)
    except:
        import traceback
        traceback.print_exc()
        f = open(os.path.join(appdir, 'critical error.txt'), 'w')
        traceback.print_exc(file=f)
        f.close()

def install_virtual_dir():
    import isapi.install
    params = isapi.install.ISAPIParameters()
    # Setup the virtual directories - this is a list of directories our
    # extension uses - in this case only 1.
    # Each extension has a "script map" - this is the mapping of ISAPI
    # extensions.
    sm = [
        isapi.install.ScriptMapParams(Extension="*", Flags=0)
    ]
    vd = isapi.install.VirtualDirParameters(
        Server="CherryPy Web Server",
        Name=site_root,
        Description = "CherryPy Application",
        ScriptMaps = sm,
        ScriptMapUpdate = "end",
        )
    params.VirtualDirs = [vd]
    isapi.install.HandleCommandLine(params)

if __name__=='__main__':
    # If run from the command-line, install ourselves.
    install_virtual_dir()

Ce script fait plusieurs choses. Il (a) agit en tant que l'installateur lui-même l'installation dans IIS [install_virtual_dir], (b) contient le point d'entrée lorsque IIS charge la DLL [__ExtensionFactory__], et (c) il crée l'instance CherryPy WSGI consommée par le gestionnaire ISAPI [setup_application ].

Si vous placez dans votre \ inetpub \ cherrypy et exécutez, il tente de s'installer à la racine de votre site Web IIS nommé « CherryPy Web Server ».

Vous êtes également invités à jeter un oeil à ma production code de site web , qui a refactorisé tout cela dans les différents modules.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top