CherryPy3 и IIS 6.0
-
16-09-2019 - |
Вопрос
У меня есть небольшое веб-приложение на 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.Есть несколько приемов, чтобы заставить это работать.
- При запуске от имени идентификатора рабочего процесса IIS у вас не будет тех же разрешений, что и при запуске сайта из вашего пользовательского процесса.Все сломается.В частности, все, что хочет быть записано в файловую систему, вероятно, не будет работать без некоторой настройки.
- Если вы используете setuptools, вы, вероятно, захотите установить свои компоненты с опцией -Z (распаковывает все файлы eggs).
- Используйте 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".
Вы также можете взглянуть на мой код производственного веб-сайта, который реорганизовал все это в разные модули.