djangoは開発環境(DEBUG=True)の場合、ビュー上でエラーが起きた場合はおなじみの有用なスタックトレースが記載されたエラー画面を表示する。
しかしプロダクション環境の場合はADMINSに設定されているメールアドレスに対してエラーがあった旨のメールを送信する。
また、slack_log_handlerを利用していれば、slack上にエラーの内容が送信される。
エラーの後に何かが動作するのならば、それを正しくチェックしなければならないということでdjango-maliceを作成した。
django-maliceについて
- 以下のエラーをわざと起こすためのViewを提供します
- HTTP 404 (Not Found)
- HTTP 403 (Permission Denied)
- HTTP 500 (Internal Server Error)
また、正常系をチェックする(HeartBeat等)のために HTTP 200 OK を返すページも提供します。
django-malice (GitHub Repository)
モチベーション
- 以下をチェックするためにエラーをわざと起こすためのViewを毎回用意するのは面倒。ならば作って配布する。
- エラーレポートが正しく送信されるのかをチェックしたい
- ロギングやエラーをトリガーとした動作が正しく駆動するかチェックしたい
django-maliceのインストール方法
- pipにて以下をインストール
$ pip install django-malice
- INSTALLED_APPSに以下を追加
INSTALLED_APPS = [
...
"malice",
]
- プロジェクトのROOT_URL_CONFに指定してあるurls.pyに以下を追加
url(r'^malice/', include('malice.urls', namespace='malice')),
注意: 本番環境の場合はURLを攻撃者が予測不可能な文字列に変更したほうが安全です。
例:
view_urlpatterns = [
...
url(r'^all-your-error-are-belong-to-us-2101/', include('malice.urls', namespace='malice')),
...
]
- runserver して以下のURLをブラウザで開きます
$ ./manage.py runserver 0.0.0.0:8000
- http://localhost:8000/malice/200
- http://localhost:8000/malice/404
- http://localhost:8000/malice/403
- http://localhost:8000/malice/500
200以外のURLはエラーを返すことを確認します。
DEBUGがTrueの状態ではADMINSにメールは送信されないので、DEBUGフラグをFalseに設定してエラーリポートが送信されることを確認してください。
開発に関して
このアプリケーションは django meetup の時間を通してcircleciでのテスト構築、パッケージ化、Pypiでの配布を行いました。
ここで会を主催してくださった BeProudの https://twitter.com/hirokiky と https://twitter.com/shimizukawaのご両人に感謝!
もしみなさんもお時間があれば django meetup に参加してみては如何でしょうか!