Я пытаюсь развернуть веб-фреймворк python web2py на iis8 на сервере Windows 2012. Я использую fastcgi, загруженный с microsoft, v 2.1 и python 2.7.
web2py иногда создает файлы .py под корневым каталогом. Когда это происходит, поток запроса IIS немедленно завершает работу с ошибками 500: «Процесс FastCGI неожиданно завершился». Я могу воспроизводить это каждый раз, например, извлекая tar-файл с использованием стандартной библиотеки python в скрипте обработчика запросов.
Если я заставлю web2py писать вне корневого каталога документов, ошибок не произойдет. Таким образом, IIS реагирует на создание файлов .py. Это вызывает конфликт, который приводит к сбою запроса. Исключения Python не достигаются. Поток запроса немедленно умирает. В файле остается 0 байтов. Таким образом, файл создается скриптом python, выполняемым для обработки запроса, но прежде чем он может быть закрыт, процесс запроса или поток умирает. Я не знаю, что IIS делает и почему, но отслеживает ли он файлы? Я отключил кеширование.
web2py иногда пытается записать файлы .py. Он делает это в двух случаях: 1) при использовании своей IDE на основе браузера для редактирования файлов .py, таких как «контроллеры» 2) при создании нового приложения, поскольку он распаковывает приложение-шаблон с именем welcome, и это включает в себя запись файлов .py У меня есть контроллер, который имитирует (2). То есть, как часть обработки запроса браузера, он распаковывает пакет файлов, составляющих приложение-шаблон, в которое входят файлы .py.
Эти проблемы не имеют ничего общего с безопасностью файловой системы, потому что файлы не .py подходят. В любом случае ошибки прав доступа к файлам наверняка будут обрабатываться исключениями python или где-то регистрироваться.
Концентрируясь на (2), веб-запрос катастрофически терпит неудачу, как только он встречает первые файлы .py.
Похоже на блокировку какая-то. Обыскиваю процессмон, но ничего интересного не вижу. Я могу получить журнал трассировки запросов из IIS для сбойного запроса, но он не предлагает никаких причин, хотя у меня нет опыта интерпретации этих файлов.
Если я изменю путь, используемый в (2), чтобы он находился вне корня документа веб-сайта IIS, он будет работать отлично. К сожалению, это не обходной путь; web2py необходимо обновить и создать файлы в корневом каталоге.
Итак, IIS что-то делает, когда файлы .py добавляются в корневой каталог его документа, и что-то происходит не в фактически выполняемом запросе, а в каком-то другом потоке или процессе. Что бы это ни было, убивает поток запроса, вероятно, из-за ошибки файловой системы, которая не обрабатывается очень хорошо. Кажется, что поток запроса немедленно умирает. У меня много операторов регистрации, и исключение Python, ожидающее этой ошибки файла, никогда не достигается.
Код web2py зрелый и работает на других http-серверах.
это происходит потому, что в wfastcgi есть довольно специфическая часть кода, обрабатывающая наблюдатель за каталогом приложения для изменений файлов. К сожалению, он срабатывает, если во время выполнения запроса добавляется новый файл. По умолчанию он перезапускает процесс (довольно резко) при любых изменениях * .py или * .config. Однако его можно настроить на просмотр только файлов * .config с помощью переменной env WSGI_RESTART_FILE_REGEX.