回報錯誤

本教學課程說明如何使用 Google Cloud console,在「Python 入門」教學課程中報告和追蹤未捕捉到的例外狀況。

Error Reporting 提供集中式資訊主頁,顯示各項錯誤的計數、堆疊追蹤記錄和發生記錄。您也可以設定錯誤發生時的快訊。

完整的教學課程內容涵蓋了數個頁面的篇幅,本頁面屬於其中一個單元。如要從頭開始及閱讀設定的操作說明,請前往 Python Bookshelf 應用程式

設定

本節使用 5-logging 目錄的程式碼。編輯檔案並在此目錄中執行指令。

  1. 開啟 config.py 檔案進行編輯,並替換下列值:
    • [PROJECT_ID] 的值設為您的專案 ID,您可以在 Google Cloud 控制台中找到專案 ID。
    • [DATA_BACKEND] 的值設為您在《使用結構化資料》教學課程中所使用的值。
    • 如果您使用的是 Cloud SQL 或 MongoDB,請將 Cloud SQLMongo 區段的值設為您在「使用結構化資料」步驟期間所使用的值。
    • [CLOUD_STORAGE_BUCKET] 設為您的 Cloud Storage 值區名稱。
    • OAuth2 configuration 區段下,將 [GOOGLE_OAUTH2_CLIENT_ID][GOOGLE_OAUTH2_CLIENT_SECRET] 的值設為您之前建立的應用程式用戶端 ID 與密鑰。

  2. 儲存並關閉 config.py 檔案。

如果您使用的是 Cloud SQL:

  1. 開啟 app.yaml 檔案進行編輯。
  2. cloudsql-instance 的值設為 config.py 檔案中 [CLOUDSQL_CONNECTION_NAME] 所使用的值。使用格式 project:region:cloudsql-instance。 接著將整列取消註解。
  3. 儲存並關閉 app.yaml 檔案。

安裝依附元件

如要建立虛擬環境並安裝依附元件,請使用以下指令:

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

在本機電腦執行應用程式

  1. 啟動本機網路伺服器:

    python main.py
    
  2. 在瀏覽器中,輸入下列網址:

    http://localhost:8080
    

按下 Ctrl+C 離開工作站,接著離開本機網路伺服器。

將應用程式部署至 App Engine 彈性環境

  1. 部署範例應用程式:

    gcloud app deploy
    
  2. 在瀏覽器中輸入下列網址:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    更改下列內容:

如果您更新應用程式,請輸入部署應用程式時使用的相同指令來部署更新版本。部署作業會為您的應用程式建立新版本,並將這個新版本晉升為預設版本。應用程式的較舊版本和相關聯的虛擬機器 (VM) 執行個體都會保留下來。這些應用程式版本和 VM 執行個體均屬於計費資源。為減少費用,請刪除應用程式的非預設版本。

若要刪除應用程式版本:

  1. 前往 Google Cloud 控制台的 App Engine「Versions」(版本) 頁面。

    前往「版本」

  2. 勾選您要刪除的非預設應用程式版本的核取方塊。
  3. 如要刪除應用程式版本,請按一下 「刪除」

如要進一步瞭解如何清除計費資源,請參閱本教學課程最後一個步驟的「清除所用資源」一節。

模擬錯誤

如要查看 Error Reporting 的執行情況,請刻意在程式碼中導入錯誤,然後在 Google Cloud 控制台的錯誤報告頁面中尋找例外狀況。

  1. bookshelf/crud.py 中,新增可存取未定義變數的作業,並在索引檢視畫面中產生 ReferenceError

    @crud.route("/")
    def list():
       x[3]
  2. 部署應用程式。

    gcloud app deploy
  3. 存取索引頁面。

    gcloud app browse

    您可以查看訊息 An internal error occurred

  4. 前往 Google Cloud 控制台的「Error Reporting」頁面:

    前往 Error Reporting

    您也可以透過搜尋列找到這個頁面。

    畫面會列出錯誤。

    查看錯誤

  5. 按一下錯誤即可查看相關資訊,例如錯誤最近一次發生的時間、發生次數及其直方圖,以及堆疊追蹤。

瞭解程式碼

如要回報未捕捉到的例外狀況,程式碼會先使用 Flask errorhandler 裝飾器,然後使用 Python 適用的 Cloud 用戶端程式庫,將例外狀況回報給 Error Reporting。

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

用戶端會自動新增追蹤資訊,並使用輔助函式從 Flask 要求中擷取相關要求詳細資料,然後將相關堆疊追蹤和 HTTP 環境填入 Error Reporting,以供應用程式中任何未捕捉到的 InternalServerError HTTP 500 例外狀況使用。

清除所用資源

為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

刪除專案的方法如下:

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。