エラーの監視に便利な gem , exception_notification を使ってみた
なんかしらのエラーが発生すると、メールを自動的に送付してくれる gem 、exception_notification を実際にかる〜く使ってみたので、そのメモ。
例によって、bundler 経由で gem をがしがしいれていきます。
環境
手順
事前準備
適当に rails アプリを作る。
be rails new AppName --skip-bundle
Gemfile に 以下の二つを追加。
gem 'mailcatcher' gem 'exception_notification'
- gem をインストール。
bundle install --path vendor/bundle
これで必要なものが揃いました。
exception_notification を使ってみる
まずは設定ファイルをいじっていく。
rails デフォルト設定の修正
development 環境では、エラーが発生してもデフォルトでメールを送らないような設定になっているので、以下のように config/environments/development.rb
を true
に修正。
config.action_mailer.raise_delivery_errors = ture
SMTP サーバの設定
config/application.rb
のを次のように書き換える。
※ 余計なコメントは削除しました
require File.expand_path('../boot', __FILE__) require "active_model/railtie" require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "action_view/railtie" require "sprockets/railtie" Bundler.require(*Rails.groups) module Notifi class Application < Rails::Application config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 } end end
これらは、 本家の書き方に習っている。
sj26/mailcatcher
exception_notification の設定
エラー時に送信されるメール情報についての設定を config/environments/development.rb
に追記する。
config.middleware.use ExceptionNotification::Rack, :email => { email_prefix: "[Exception] ", sender_address: %{"Exception Notifier" <no-reply@example.com>}, exception_recipients: ["notification@example.com"] }
コントローラを作成する
わざとエラーを発生させるためのページを作ります。
$ be rails g controller home index
そして、HomeController#index に例外を発生させるため以下を追記。
class HomeController < ApplicationController def index raise 'aaa' end end
サーバを起動し、確認する
$ be rails s
で rails サーバを立てつつ、 Command + t
でタブを増やすなりして、$ be mailcatcher
で SMPT サーバを起動する。
まず、rails サーバにアクセスして例外を発生させる。
デフォルトでは以下。
http://localhost:3000/home/index
その次に、SMPT サーバにアクセスしてメールがと届いているか確認する。
デフォルトでは以下。
http://127.0.0.1:1080
こんな感じで、さっきまで空だったのが、なんか来てます。
ここまで来たら成功。