Вопрос

У меня есть небольшое веб-приложение на Python, использующее фреймворк Cherrypy.Я ни в коем случае не являюсь экспертом по веб-серверам.

Я заставил Cherrypy работать с Apache, используя mod_python на нашем сервере Ubuntu.Однако на этот раз мне приходится использовать Windows 2003 и IIS 6.0 для размещения своего сайта.

Сайт отлично работает как автономный сервер - я просто теряюсь, когда дело доходит до запуска IIS.Я провел прошедший день, гуглясь и слепо пробуя все подряд, чтобы запустить это.

У меня установлены все различные инструменты, о которых мне сообщили веб-сайты (Python 2.6, CherrpyPy 3, ISAPI-WSGI, PyWin32), и я прочитал всю документацию, какую только смог.Этот блог был самым полезным:

http://whatschrisdoing.com/blog/2008/07/10/turbogears-isapi-wsgi-iis/

Но я все еще не понимаю, что мне нужно для запуска моего сайта.Я не могу найти никаких подробных примеров или практических рекомендаций, с которых можно было бы даже начать.Я надеюсь, что кто-нибудь здесь сможет помочь!

Ваше здоровье.

Это было полезно?

Решение 2

Хорошо, у меня все получилось.Спасибо Джейсону и всей его помощи.Мне нужно было позвонить

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

У меня это было в конфигурационном файле под [/], но по какой-то причине ему это не понравилось.Теперь я могу запустить свое веб-приложение - тогда, я думаю, я попытаюсь разобраться, почему ему нужно это обновление конфигурации и не нравится файл конфигурации, который у меня есть...

Другие советы

Я запускаю CherryPy за своими сайтами IIS.Есть несколько приемов, чтобы заставить это работать.

  1. При запуске от имени идентификатора рабочего процесса IIS у вас не будет тех же разрешений, что и при запуске сайта из вашего пользовательского процесса.Все сломается.В частности, все, что хочет быть записано в файловую систему, вероятно, не будет работать без некоторой настройки.
  2. Если вы используете setuptools, вы, вероятно, захотите установить свои компоненты с опцией -Z (распаковывает все файлы eggs).
  3. Используйте win32traceutil для отслеживания проблем.Убедитесь, что в вашем скрипте hook, который вы импортируете win32traceutil.Затем, когда вы пытаетесь получить доступ к веб-сайту, если что-то пойдет не так, убедитесь, что оно распечатано в стандартном формате, оно будет зарегистрировано в утилите трассировки.Используйте 'python -m win32traceutil', чтобы просмотреть выходные данные трассировки.

Важно понимать базовый процесс запуска приложения ISAPI.Я предлагаю сначала получить приложение hello-world WSGI, работающее под управлением ISAPI_WSGI.Вот ранняя версия скрипта подключения, который я использовал для проверки того, что я заставляю CherryPy работать с моим веб-сервером.

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

Этот скрипт выполняет несколько вещей.Он (a) действует как установщик, устанавливаясь в IIS [install_virtual_dir], (b) содержит точку входа, когда IIS загружает DLL [__ExtensionFactory__], и (c) он создает экземпляр CherryPy WSGI, используемый обработчиком ISAPI [setup_application].

Если вы поместите это в свой каталог \inetpub\ cherrypy и запустите его, оно попытается самоустанавливаться в корень вашего веб-сайта IIS с именем "CherryPy Web Server".

Вы также можете взглянуть на мой код производственного веб-сайта, который реорганизовал все это в разные модули.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top