任何人都可以帮我在IIS 6上运行Flask应用程序吗?我曾尝试使用isapi-wsgi,但是当我访问虚拟目录地址时,我得到一个页面,上面写着“无法找到指定的模块”。还有其他选择吗?
下面是我为isapi-wsgi编写的Python脚本。在IIS管理器中创建了虚拟目录并且一切正常,但该站点无法正常工作。
from wof import app
import os
app.secret_key=os.urandom(24)
import isapi_wsgi
def __ExtensionFactory__():
return isapi_wsgi.ISAPISimpleHandler(app)
if __name__ == '__main__':
from isapi.install import *
params = ISAPIParameters()
sm = [ScriptMapParams(Extension="*", Flags=0)]
vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
params.VirtualDirs = [vd]
HandleCommandLine(params)
答案 0 :(得分:50)
HTTP - > IIS - > ISAPI - > FastCGI - > WSGI(Flask应用程序)
我使用this site中的安装程序.exe安装了pyodbc
。从源代码安装(例如pip,用于安装到虚拟环境中)需要C / C ++编译器。
wfastcgi.py
选择适合您的版本,最好是支持Python 3.3的版本(我使用David Ebbo's)。你可能想要"官方"版本from here。
将wfastcgi.py
脚本安装到C:\Inetpub\wwwroot
,并确保为您的应用程序提供服务的帐户("网络服务"默认情况下)具有读取权限。
virtualenv
安装到System site-packages C:\Python33\Scripts\pip.exe install virtualenv
(如果您使用的是Python 3.3并在默认位置安装了所有内容)
您可以在系统的任何位置安装应用程序。您可能希望在C:\Inetpub
下安装它。在本教程中,我们将调用应用程序安装%APPROOT%
的根文件夹。 (不要在环境变量中加上引号。)
确保为您的应用程序提供服务的帐户("网络服务"默认情况下)具有对所有脚本文件的读取权限。这个命令:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
将为您的应用程序目录提供以下权限:
添加必要的任何本地配置(我的应用程序使用版本控制系统忽略的local.cnf文件) - 例如数据库网址。
确保您的应用程序在Web.config
中包含%APPROOT%
文件 - 有关文件格式的信息,请参阅以下部分。
C:\Python33\Scripts\virtualenv.exe --system-site-packages "%APPROOT%\env"
(如果您的应用程序已使用该目录,请选择env
以外的名称。)
cd "%APPROOT%"
env\Scripts\activate
pip install -r Packages
(我的项目将需求规范保存在名为Packages
的文件中。)
使用inetmgr.msc
(开始 - > 运行... ,然后在编辑框中输入inetmgr
并按 ENTER )启动 Internet信息服务(IIS)管理器。确保将您创建的节点(网站或虚拟目录)的本地路径设置为Flask应用程序的根文件夹。 wfastcgi.py
使用本地路径来标识Flask应用程序以处理请求。
为节点提供读取和脚本(运行脚本)权限。
fcgiext.ini
此文件与步骤1中安装的fcgiext.dll
位于同一目录中(默认情况下为%SYSTEMROOT%\system32\inetsrv
)。
在配置此文件时,您需要几个参数:
fcgiext.ini
中提供FastCGI(ISAPI)处理程序参数的部分的名称。您可以选择此值 - 选择代表您的应用程序的内容。使用这些参数:
将FastCGI请求映射到处理部分:
*:{site id}={application name}
添加到[Types]
部分。*:/lm/w3svc/{site id}/root/{path to app}={application name}
添加到[Types]
部分。使用此应用程序的参数(full reference)添加处理部分([{application name}]
):
ExePath={approot}\env\python.exe
Arguments=C:\Inetpub\wwwroot\wfastcgi.py
(或安装wfastcgi.py
适配器脚本的任何地方)EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc.
(请参阅引用规则的完整参考资料)。这是设置WSGI_LOG environment variable的好地方 - 确保为网站提供服务的帐户(默认情况下为“网络服务”)对文件具有写入权限,并且(如果文件不存在)允许添加将文件发送到包含目录。使用 Internet信息服务(IIS)管理器,从节点(网站或虚拟目录)的上下文(右键单击)菜单中选择“属性...”以供您使用Flask应用程序和:
在“主目录”标签(网站)或“虚拟目录”标签(虚拟目录)中,单击“配置..."按钮。
在“通配符应用程序映射”部分中,使用“插入..."按钮添加通配符映射:
%SYSTEMROOT%\system32\inetsrv\fcgiext.dll
。此文件(在此设置中)由wfastcgi.py
读取,不是由IIS读取。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<applicationSettings>
<add key=“PYTHONPATH” value=“”/>
<add key=“WSGI_HANDLER” value=“module.application”/>
</applicationSettings>
</configuration>
<add>
元素在Python中添加环境变量(os.environ
)。
WSGI_HANDLER
- 它告诉wfastcgi.py
如何找到WSGI应用程序对象。如果值以&#34;()&#34;结束,wfastcgi.py
将调用命名对象,期望它返回WSGI应用程序对象。
PYTHONPATH
是专门处理的 - wfastcgi.py
对%VAR%
的值执行(环境)变量扩展(使用Windows标准PYTHONPATH
表示法),然后以分号分割结果,并在调用WSGI应用程序之前将条目附加到sys.path
。因为wfastcgi.py
在导入包含WSGI应用程序对象的模块之前将当前目录更改为指定为网站或虚拟目录的本地路径的路径,所以在PYTHONPATH中包含空字符串将导致搜索包含您的Flask应用程序目录作为起点。您还可以在fcgiext.ini
中设置PYTHONPATH(在这种情况下,它由解释器包含在sys.path
中,然后再由wfastcgi.py
包含)。
WSGI_RESTART_FILE_REGEX
提供了一个Python正则表达式,用于过滤应该触发FastCGI处理程序进程重启的路径的文件更改通知。设置此选项可在源文件或配置文件更改时触发。我使用(?i).*\.(py|cnf|config)$
。
WSGI_LOG
可以在这里设置,但我认为最好在fcgiext.ini
设置。
使用IIS 7,FastCGI的一些变化发生了巨大变化。从这个版本开始,FastCGI直接通过IIS提供支持,而不是通过扩展配置(即步骤1.4不是必需的,fcgiext.ini
不能控制FastCGI的行为IIS 7+并且无需创建/编辑它。相反,请确保在控制面板&gt;中的 Internet信息服务下启用 CGI 。节目和特征&gt;打开或关闭Windows功能。
Web.config
IIS 7是第一个从Web.config
文件中读取与FastCGI相关的配置设置的IIS版本。您的Web.config
文件需要在<configuration>
元素中包含<system.webServer>
元素,其中包含<handlers>
元素,其中包含<add>
元素,其中包含以下属性:
*
*
FastCgiModule
Unspecified
Script
scriptProcessor
属性 <add>
元素的此属性必须包含要使用的Python解释器.exe
文件的完整路径(Python virtualenv的Scripts
子文件夹中的文件),然后是一个|
,然后是您正在使用的wfastcgi.py
文件的完整路径。由于这些路径取决于运行应用程序的计算机的设置,因此您可能希望将此属性设置为部署过程的一部分。
inetmgr
中,单击树中的服务器节点,然后从中心窗格中选择 FastCGI设置。将出现可执行/参数对的列表。python.exe
和wfastcgi.py
添加完整路径条目。两者的显示方式应与<handlers>/<add>
中的Web.config
元素相同。PYTHONPATH
环境变量,以包含应用程序代码库的根目录。有关在PYTHONPATH
的{{1}}中添加空<applicationSettings>
条目的建议可能不适用于此版本的IIS。答案 1 :(得分:3)
查看Django关于这个主题的页面。它帮助我建立了一个有效的Django项目,但对于Flask应用程序来说应该不同。
http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer
答案 2 :(得分:0)
我从不使用IIS,但IIS支持CGI网关,因此您应该能够使用WSGI调整CGI。
IIS <--> CGI <--> WSGI
要将WSGI作为CGI脚本运行,可以使用Python标准库中的CGIHandler。