Sentry 開發者貢獻指南-配置 PyCharm
概述
如果您使用 PyCharm 進行開發,則需要配置一些內容才能運行和調試。
本文檔描述了一些對 sentry 開發有用的配置
配置
Python 解釋器:(確保它是 venv 解釋器)例如 ~/venv/sentry/bin/python
要創建配置(run/debug 配置),只需轉到 Run | Edit Configurations...(也可在默認工具欄中使用)。
Test runner
Sentry 使用 pytest 進行單元測試。
創建 pytest 配置(在 Python tests 下)
設定目標(Set Target): Custom
附加參數(Additional Arguments): tests/sentry
具有所需一切的 Dev server
用于在所有設置(web、worker、cron)的情況下運行(非調試):
- 創建另一個 Python 配置
- 腳本路徑(Script path):
/bin/sentry e.g. ~/venv/sentry/bin/sentry - 參數(Parameters): devserver --workers
- Python 解釋器(Python interpreter): venv interpreter
- 工作目錄(Working dir): (sentry 安裝目錄中的 src 路徑) e.g. ~/dev/sentry/src
Note: 您將無法使用此配置調試 Web Worker(Web Worker 是通過調用 uwsgi 服務器啟動的)。
使用 PyCharm 進行調試
devserver 命令的存在主要是為了在單獨的進程中生成守護進程,這意味著在默認模式下將 debugger 附加到它并不是很有用。
Web server
devserver 命令有一個特殊的標志,它將導致 web server 在同一進程的線程中啟動(而不是作為 web 守護進程)。這允許啟動 devserver 的相同 PyCharm "Debug" 動作附加到 web server 并在其后端命中斷點。
克隆你的 devserver 運行配置并將 --debug-server 添加到 "Parameters" 字段的末尾。通過選擇 "Debug" 而不是 "Run" 來啟動它。
--debug-server 標志可能會導致進程無法正確響應 SIGINT 并且關閉得比原始配置更不優雅。建議保留兩者,將第一個與 Run 命令一起使用,將第二個與 Debug 命令一起使用。
您可以將 --workers 標志與 --debug-server 一起保留,但請注意,不可能將斷點附加到 workers ,也不能附加到由 devserver 產生的任何其他守護進程。
獨立守護進程
要將 debugger 附加到除 web 之外的單個守護程序,請為守護程序創建運行配置。以下屬性應與您的 devserver 配置相同。(您可以克隆它并僅更改 Parameters 字段。)
- 腳本路徑(Script path):
/bin/sentry,例如: ~/venv/sentry/bin/sentry - Python 解釋器(Python interpreter): venv interpreter
- 工作目錄(Working dir): (sentry 安裝目錄中的 src 路徑)例如 ~/dev/sentry/src
將新運行配置的參數設置為啟動守護程序的 run 命令,例如:
- run cron
- run worker -c 1
提示和故障排除
- 如果您想調試它,相同的一組修改將適用于 getentry 項目的運行配置。
- PyCharm 的 Compound 運行配置類型對于一次啟動多個運行配置很有用。如果您正在調試一個或多個與開發服務器協同的獨立守護進程,那么設置一個可能會很方便。
- 如果您希望 Sentry 在調試環境中的行為不同于常規運行中的行為,您可以添加任意環境變量,然后在您的 .sentry/sentry.conf.py 文件中檢查它們。
例如,下面的屏幕截圖顯示了調試時禁用 APM 采樣的設置(因為在斷點處停止會污染時間測量)。請注意,PYCHARM_DEBUG 是一個任意名稱;它對 PyCharm 和 Sentry 沒有特殊意義。
- 如果您單獨運行的守護進程不工作,您可以通過調試 devserver --debug-server 并在 src/sentry/runner/commands/devserver.py 上插入斷點來進行故障排除。這將讓您手動檢查 devserver 命令正在運行的命令。(在底部附近尋找 manager.add_process 調用。)嘗試調整運行配置中的參數以匹配這些命令,如果它們還沒有的話。