概述
如果您使用 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
):<venv dir>/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
):<venv dir>/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
呼叫。)嘗試調整執行配置中的引數以匹配這些命令,如果它們還沒有的話。