今天在測試如何將 Mapleboard 上的仿 GCF 之 serverless app 移植到 Render 上時, 發現主程式 serverless.py 有不完美之處 : 我居然沒有設定根目錄路徑! 為此進行了小改版, 版本提升為 v4.
本系列全部測試文章參考 :
其實只是在 serverless.py 添加下列根目錄存取的回應程式碼而已 :
# 根目錄
@app.route("/")
def index():
return '<p>Serverless API 運行中! <a href="/login">登入系統</a></p>'
因為修改了主程式, 所以必須重啟服務才會生效 :
tony1966@LX2438:~/flask_apps/serverless$ sudo systemctl restart serverless
[sudo] tony1966 的密碼:
檢視服務狀態 :
tony1966@LX2438:~/flask_apps/serverless$ sudo systemctl status serverless
● serverless.service - Serverless Flask App
Loaded: loaded (/etc/systemd/system/serverless.service; enabled; vendor pr>
Active: active (running) since Fri 2025-10-10 18:05:15 CST; 21s ago
Main PID: 88782 (gunicorn: maste)
Tasks: 5 (limit: 4213)
Memory: 68.0M
CPU: 3.294s
CGroup: /system.slice/serverless.service
├─88782 "gunicorn: master [serverless:app]" "" "" "" "" "" "" "" ">
├─88784 "gunicorn: worker [serverless:app]" "" "" "" "" "" "" "" ">
├─88785 "gunicorn: worker [serverless:app]" "" "" "" "" "" "" "" ">
├─88786 "gunicorn: worker [serverless:app]" "" "" "" "" "" "" "" ">
└─88787 "gunicorn: worker [serverless:app]" "" "" "" "" "" "" "" ">
Oct 10 18:05:15 LX2438 systemd[1]: Started Serverless Flask App.
Oct 10 18:05:15 LX2438 gunicorn[88782]: [2025-10-10 18:05:15 +0800] [88782] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88782]: [2025-10-10 18:05:15 +0800] [88782] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88782]: [2025-10-10 18:05:15 +0800] [88782] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88784]: [2025-10-10 18:05:15 +0800] [88784] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88785]: [2025-10-10 18:05:15 +0800] [88785] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88786]: [2025-10-10 18:05:15 +0800] [88786] [IN>
Oct 10 18:05:15 LX2438 gunicorn[88787]: [2025-10-10 18:05:15 +0800] [88787] [IN>
lines 1-22/22 (END)
拜訪 Mapleboard 的 Flask app 子網域根目錄 :
按 "登入系統" 輸入密碼 :
登入成功就可以線上管理函式模組了 :
我把 serverless_v4.zip 放在 GitHub :
2025-10-17 補充 :
今天修改根目錄的處理方式, 上面的作法較簡單, 只是固定顯示登入連結, 即使已登入狀態存取根目錄也是如此, 這種情況應該顯示函式列表較合理, 修改如下 :
# 根目錄
@app.route("/")
def index():
if check_auth(): # 若已登入導向函式列表頁面
return redirect('/function/list_functions')
else: # 否則顯示登入提示
return '<p>Serverless API 運行中! <a href="/login">登入系統</a></p>'
首先會呼叫 check_auth() 看看是否為已登入狀態, 是的話就呼叫 flask.redirect() 重導至函式列表模組 list_functions, 否則就顯示登入頁面, 程式前面須匯入 redirect() 函式.
注意, 此處 redirect() 必須直接傳入函式模組之路徑, 如果使用 url_for('list_functions') 會出現錯誤, 因為 serverless.py 是動態載入要執行的函式模組, 而 url_for() 是透過 Flask 內部的 endpoint 映射表 (app.url_map) 來尋找對應函式的, 動態載入情況下, Flask 無法在啟動階段 (app 建立時) 就知道有這個函式的 endpoint.



沒有留言 :
張貼留言