2025年10月10日 星期五

Mapleboard MP510-50 測試 (四十一) : HTTP API 函式執行平台 (6)

今天在測試如何將 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. 

沒有留言 :