[英]Multiple Python Flask sites on IIS
我想運行三個單獨的 Python Flask URLS,我們稱它們為測試、暫存和生產。 我想要一個 IIS 網站來提供這三種不同的應用程序。
所以我創建了一個網站,在這個網站下創建了三個 IIS 應用程序,並將它們的根文件夾分別設置為 d:\execution\test, d:\execution\staging, d:\execution\prod。
在每個文件夾下都有一個 hello_world.py,看起來像這樣
import datetime
from flask import Flask
app = Flask(__name__)
@app.route('/test')
def hello_world():
return 'Hello World (Test)!' + datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
if __name__ == '__main__':
app.run(debug=True)
顯然,根據需要將路由更改為 /test、/staging 和 /prod 每個文件夾還包含一個 web.config,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="hello_world.py" />
</files>
</defaultDocument>
<directoryBrowse enabled="true" />
</system.webServer>
<system.web>
<identity impersonate="false" />
</system.web>
<appSettings>
<add key="PYTHONPATH" value="D:\Execution\Test" />
<add key="WSGI_HANDLER" value="hello_world.app" />
</appSettings>
</configuration>
再次根據需要更改 PYTHONPATH
主網站根目錄中有一個 web.config 說
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Python Flask" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python34\python.exe|C:\Python34\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
這是 python 處理程序。 如果我把它去掉,我可以從網站和三個應用程序子文件夾/URL 中很好地提供基本的 HTML 頁面。 如果我把它放回去,我什么也得不到,甚至連基本的 HTML 頁面都得不到。 IIS 拋出一個通用的“找不到網頁。HTTP 404 未找到”當我嘗試導航到任何內容時,無論是目錄瀏覽,index.html 還是http://server:port/test應用程序路由,如上所述我的 python flask 應用程序。
有人對我做錯了什么有什么建議嗎?
我認為問題的根源在於您的站點指定了一個基於CGI
的處理程序,該處理程序將覆蓋為每個應用程序提供的wsgi_handler
值。
..您真的打算通過wgi運行wsgi嗎? 如果您的回答是否定的,那肯定是您的問題。
我知道這是一個老問題,但我有一個類似的問題,並找到了一個可以幫助人們使用 Flask + IIS 的解決方案:
解決方案:使用藍圖...每個應用程序應設置藍圖 URL 包括虛擬目錄(應用程序)的名稱
例如,如果您在 IIS 上具有以下結構:
DefaultWebSite
\YourFlaskApp01
\YourFlaskApp02
...
在 YourFlaskApp01 代碼中設置一個 Flask 藍圖:
bpname = flask.Blueprint('bpname', __name__, url_prefix='/YourFlaskApp01')
在 YourFlaskApp02 代碼中設置一個 Flask 藍圖:
bpname = flask.Blueprint('bpname', __name__, url_prefix='/YourFlaskApp02')
並在端點方法上使用藍圖:
@bpname.route("/foo", methods=["GET"])
def foo():
...
如果您不使用藍圖,我想如果您直接在
@app.route('/YourFlaskApp01/test')
但我沒有測試過。 :(
在 IIS 上,請記住始終為與應用程序池關聯的用戶授予適當的權限。
設置 Flask + IIS 的一般說明:
Microsoft Learn - 為 IIS 配置 Python web 應用
Medium.com - 在IIS服務器上部署一個Python Flask應用程序並在IP地址機器上運行
希望這可以幫助某人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.