Проблема с развертыванием скрипта web.py на IIS7 через PyISAPIe - PullRequest
1 голос
/ 12 мая 2011

Я столкнулся с проблемой при развертывании однофайлового API web.py на IIS 7 через PyISAPIe . Я собираюсь поговорить об этом сегодня.

Мне удалось развернуть несколько веб-приложений Django на IIS 7 с использованием PyISAPIe. Модуль Isapi.py, который я использовал для сайтов Django, выглядит примерно так:

from django.core.handlers.wsgi import WSGIHandler as DjangoHandler
from Http.WSGI import RunWSGI
from Http import Env
import os
import sys
sys.path.append(r"C:\projects\myproject")
os.environ["DJANGO_SETTINGS_MODULE"] = "myproject.settings"
Base = "/"
Exclude = ["/media"]
Handler = DjangoHandler()

def Request():
  PathInfo = Env.PATH_INFO
  return RunWSGI(Handler, Base=Base)

Однако, не зная, как настроить вышеизложенное для использования с моим скриптом web.py, я начал с файла WSGI example Isapi.py. После дополнений у меня есть следующий файл:

from Http.WSGI import RunWSGI
from Http import Env
from md5 import md5
import imp
import os

import sys
sys.path.append(r"C:\projects\otherproject\")

SCRIPT_PATH = 'C:\projects\otherproject\device_api.py'
ScriptHandlers = {
     "/": r"C:\projects\otherproject\device_api.py",
}
def RunScript(Path):
  global ScriptHandlers
  try:
    return ScriptHandlers[Path]()
  except KeyError:
    Name = '__'+md5(Path).hexdigest().upper()
    ScriptHandlers[Path] = \
      imp.load_source(Name, Env.SCRIPT_TRANSLATED).Request
    return ScriptHandlers[Path]()

Apps = {
#  "/app/django/"  : lambda P: RunWSGI(DjangoHandler()),
#  "/app/trac/"    : lambda P: RunWSGI(TracHandler),
  "/" : lambda P: RunScript(P),
}

def Request():
  Name = Env.SCRIPT_NAME
  for App, Handler in Apps.items():
    if Name.startswith(App):
        return Handler(Name)
  raise Exception, "Handler not found."

Я уверен, что есть кое-что, что я пропускаю или явно делаю неправильно. Когда я пытаюсь получить доступ к сценарию в браузере, я получаю 500 ответов от IIS со следующими данными:

Could not initialize interpreter

Traceback (most recent call last):
  File "C:\projects\pyisapie\Http\Isapi.py", line 29, in 
    from md5 import md5
  File "C:\Python26\Lib\md5.py", line 8, in 
    DeprecationWarning, 2)
  File "C:\Python26\Lib\warnings.py", line 29, in _show_warning
    file.write(formatwarning(message, category, filename, lineno, line))
Exception: Not currently processing a request

Хотя я все еще играю с разными твиками и тому подобным, я не совсем уверен, что мне нужно сделать, чтобы это заработало. Буду очень признателен за любую помощь в этом направлении.

Спасибо за ваше время.

PS: у меня есть этот скрипт, device_api.py, развернутый под Apache2 с использованием mod_wsgi, поэтому я уверен, что с кодом внутри скрипта все в порядке.

1 Ответ

2 голосов
/ 14 мая 2011

Проработав несколько дней, я наконец нашел решение.Я записал это подробно.Я собираюсь предоставить ссылку на мой блог, где я его записал.Он называется « Guide: Развертывание web.py на IIS7 с использованием PyISAPIe ».Я надеюсь, что это помогает кому-то сталкиваться с подобными проблемами.

Спасибо.

...