回報錯誤

本教學課程說明如何使用 Google Cloud 控制台,在「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. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  3. 如要刪除應用程式版本,請按一下 「刪除」

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

模擬錯誤

如要查看錯誤報告的執行情況,請刻意在程式碼中導入錯誤,然後在 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 環境填入錯誤報表,以供應用程式中任何未捕捉到的 InternalServerError HTTP 500 例外狀況使用。

清除所用資源

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

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

刪除專案的方法如下:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.