2009-11-05 2 views
4

У меня есть небольшое веб-приложение Python с использованием инфраструктуры Cherrypy. Я никоим образом не специалист в веб-серверах.CherryPy3 и IIS 6.0

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

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

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

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

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

Cheers.

+0

Когда вы получили вишневый рабочий * с * apache, нужно было привязать его к другому порту (например, 8080), чтобы избежать конфликта с apache, или это было нечто более тонкое? Я спрашиваю, потому что cherrypy может делать автономные веб-сайты и не нуждается в apache. – pavium

+0

Я привязал его к порту 80 в Apache. Вы можете заставить автономного хоста Cherrypy прослушивать порт 80 (или любой другой), если хотите. – hsimah

+0

Номера портов не имеют значения. Когда вы используете ISAPI-wsgi, приложение WSGI вызывается из процесса веб-сервера (загружается через DLL), поэтому единственным номером порта является тот, который настроен в IIS. –

ответ

2

ОК, я получил его работу. Благодаря Джейсону и всей его помощи. Мне нужно позвонить

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

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

10

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

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

Важно понять базовый процесс для запуска приложения ISAPI. Я предлагаю сначала получить приветственное приложение WSGI, работающее под ISAPI_WSGI. Вот ранняя версия скрипта hook, который я использовал для проверки того, что я получаю 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».

Также вы можете взглянуть на мой production web site code, который реорганизовал все это в разные модули.

+0

Hi Jason, Благодарим вас за ответ. Я должен был запустить сайт в пятницу, так что, к сожалению, он работает как процесс с использованием CherryPy. Сегодня я попробую ваши советы. Я получил Hello World для работы (несколько) с использованием большого количества проб и ошибок - даст вам знать, как я себя чувствую. – hsimah

+0

ОК, поэтому я попытался использовать ваш пример здесь, и я столкнулся с тем же вопросом, который у меня был с моим собственным HelloWorld. Я считаю, что моя конфигурация IIS - проблема, а не мой Python. Когда я пытаюсь запустить HelloWorld, я получаю сообщение об ошибке с длинным трассировкой, заканчивающимся на: . Я могу, однако, установить его как виртуальный каталог (измените параметр Name). Если у меня нет открытого метода с тем же именем, что и у VD, я получаю сервер CherryPy 404. Ненавижу быть таким новичком, но не могли бы вы рассказать о том, как настроить сайт IIS с самого начала? – hsimah

+0

Двойная проверка использования isapi-wsgi 0.4.1. Возникла проблема с 0,4, когда определенные веб-сайты не будут обнаружены правильно (это связано с случаем/ROOT в объекте сайта IIS). –