我正在尝试在Windows Server 2012上的iis8上部署python Web框架web2py。我正在使用fastcgi,从microsoft,v 2.1和python 2.7下载
web2py有时会在docroot下创build.py文件。 发生这种情况时,IIS请求线程立即崩溃,出现500个错误“FastCGI进程意外退出”。 我可以每次重现这一点,例如通过在请求处理程序脚本中使用python标准库提取tar文件。
如果我让web2py在docroot之外写入,那么错误就不会发生。 所以IIS在创build.py文件时会有反应。 这导致了冲突,导致请求崩溃。 没有达到Pythonexception。 请求线程立即死亡。 该文件保留为0字节。 所以这个文件是通过执行python脚本来处理请求的,但是在它被closures之前,请求进程或线程就会死掉。 我不知道IIS在做什么或者为什么,但它是否有文件观看? 我已经closurescaching。
web2py有时会尝试写入.py文件。 它有两种做法:1)当使用基于浏览器的IDE编辑.py文件(如“controllers”)时2)在创build新的应用程序时,因为它解压缩了一个名为welcome的模板应用程序,这包括编写.py文件我有一个模拟(2)的控制器。 也就是说,作为处理浏览器请求的一部分,它解开了构成模板应用程序的文件包,其中包括.py文件。
这些问题与文件系统安全无关,因为非.py文件是可以的。 在任何情况下,文件权限错误肯定会由pythonexception处理或将logging在某处。
集中(2),一旦遇到第一个.py文件,Web请求就会以灾难性的方式失败。
它看起来像某种locking。 我正在淘洗processmon,但没有看到任何有趣的东西。 我可以得到一个来自IIS的请求跟踪日志的崩溃的请求,但它没有提供任何理由,虽然我没有经验解释这些文件。
如果我将(2)中使用的path更改为在IIS网站的文档根目录之外,则完美运行。 不幸的是,这不是一个解决办法。 web2py需要在docroot下更新和创build文件。
因此,当.py文件添加到文档根目录下时,IIS正在做一些事情,并且在实际运行的请求中没有发生什么事情,但是在其他某个线程或进程中。 什么都是,杀死请求线程可能是由于文件系统错误,处理不好。 请求线程似乎马上死亡。 我有大量的日志语句,并且等待这个文件错误的Pythonexception永远不会到达。
web2py代码已经成熟,可以在其他http服务器下运行。
发生这种情况是因为wfastcgi有一个相当特殊的代码段来处理应用程序目录中的一个观察者以进行文件更改。 不幸的是,如果在执行请求期间添加了一个新文件,它就会启动。 默认情况下,对于任何* .py或* .config更改重新启动进程(以一种非常混乱的方式)。 但是,可以设置通过WSGI_RESTART_FILE_REGEX envvariables只监视* .config文件。