簡體   English   中英

IIS 上的多個 Python Flask 站點

[英]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地址機器上運行

Flask - 帶有藍圖的模塊化應用程序

希望這可以幫助某人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM