最近在我的 LG 筆電 (Win 11) 測試 Line Bot 時, 利用 Flask 在本機建立一個網站當作後端應用伺服器, 但光是一個基本的 Flask 網站, 運行後用 http://localhot:port 或 http://127.0.0.1:port 瀏覽都一直轉圈圈沒有顯示網頁, 很久很久之後 (time out) 才顯示 "網站無回應". 開始運行時防火牆會詢問是否要允許存取, 我都有勾選公用與私用皆允許啊! 真奇怪, 以前這樣做都不曾有此問題, 參考 :
原先以為是 Win 11 的問題, 但我在同樣是 Win 11 的舊筆電 Acer Swift 5 上跑卻可順利顯示網頁, 比較兩個 Flask 版本也同樣是 v3.1.0, 看來應該與作業系統無關. 晚上回到鄉下, 用那台 LEMEL 老電腦跑也是不行 (不管是用命令列用 python app.py 執行還是在 Thonny 按 Play 見執行都一樣), 況且其 Flask 版本還是較舊的 v2.3.2, 所以應該與 Flask 版本無關, 總之是原因不明.
我用谷歌大神探索解決辦法時找到 下面這兩篇文章 :
作者是在命令列用 flask run -h localhost -p 3000 的指令 (指定 host 為 localhost, 埠號為 3000) 執行 Flask 應用程式的, 但我用此指令執行卻出現 "Could not locate a Flask application" 的錯誤訊息 :
D:\Python\flask>flask run -h localhost -p 3000
Usage: flask run [OPTIONS]
Try 'flask run --help' for help.
Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.
搜尋此訊息找到下面這篇文章 :
原來 flask run 指令固定會到目前目錄下找 app.py 來執行, 我原來的 Flask 應用程式檔名為 flask_app.py, 把它改成 app.py 之後就可順利執行了 :
D:\Python\flask>flask run -h localhost -p 3000
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://localhost:3000
Press CTRL+C to quit
127.0.0.1 - - [27/Jan/2024 20:50:38] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Jan/2024 20:50:38] "GET /favicon.ico HTTP/1.1" 404 -
不管是用 http://localhost:3000 還是 http://127.0.0.1:3000 都能順利顯示網頁 :
回到我的 LG 筆電依照上述辦法將 Flask 應用程式名稱改為 app.py, 執行 flask run 指令後用瀏覽器連線 127.0.0.1, 結果就能順利顯示網頁了. 結論是 :
- 在本機測試 Flask 應用程式時最好使用 flask run 指令.
- Flask 應用程式檔名要用 app.py.
雖然尚不知用 python 指令執行 Flask 應用程式在某些電腦可以順利顯示網頁, 但某些電腦卻不行的原因, 但至少找到了解決方案, 開心!
沒有留言:
張貼留言