Ruby on Rails のアプリで例外が発生したらメールでお知らせを受け取りたい。exception_notification という gem を使うと可能になるというので、設定してみた。
exception_notification の設定
Gem install
Gemfile に次の一行を追記して、bundle install を実行する。
gem 'exception_notification', :require => 'exception_notifier'
作者の Sebastian Martinez 氏から、最新版の exception_notification なら「:require => 'exception_notifier'」の記述はいらないよ、とコメントをもらった [Thank you, Sebastian]。
gem 'exception_notification'
メールを送付するための Action Mailer の gem も自動でインストールされるので助かる。
設定
config/environments/development.rb
にメール送付の設定を書く。上手く行ったら、config/environments/production.rb
にコピー。
# Exception Notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[プロジェクト名] ",
:sender_address => %{"notifier" <notifier@example.com>},
:exception_recipients => %w{exceptions@example.com}
エラーが出たら、メールを送りたい。でも、とりあえずメール設定は後回しにしたいので、ターミナルに出力させてみる。次の一行を config/environments/development.rb
に追記。
config.action_mailer.delivery_method = :test
例外のコード
手元に例外を出すコードがなかったので、ちょっと強引に行く。Ruby on Rails Guides のブログ・アプリで新規作成ページに行ったら例外を出す、本当に強引なコード。
app/controllers/posts_controller.rb
の def new
に次の様に例外発生コードを挿入。
def new
raise "exception sample"
...
例外を出す
さて、ブラウザーを起動して「新規作成」ページへ。例外が発生するはず。xterm にはこんな文章が出てくれば OK。
Sent mail to exceptions@example.com (7ms) Date: Thu, 21 Mar 2013 11:59:53 +0900 From: notifier <notifier@example.com> To: exceptions@example.com Message-ID: <514a77a971208_16764fb37dc647a@localhost.mail> Subject: [Try-RoR] posts#new (RuntimeError) "exception sample" Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit A RuntimeError occurred in posts#new: exception sample app/controllers/posts_controller.rb:31:in `new' ...
Gmail 設定
Action Mailer の設定を config/environments/development.rb
もしくは config/environments/production.rb
に書く。先に書いた terminal に例外情報を出力するコードはコメント・アウトする。
# Action Mailer for Gmail
# config.action_mailer.delivery_method = :test
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'gmail.com',
:user_name => 'your_account@gmail.com',
:password => 'your_password',
:enable_starttls_auto => true
}
これで例外を発生させて Gmail からメールが届けば成功。
わざと例外を発生させてる人は、そのコードを削除してお終い。
あとがき
Rails2 時代と比べて、SSL 関連の設定が楽になってて幸せだった。Action Mailer の SMTP を Gmail ではなく Yahoo! Mail (yahoo.com の方) を使いたかったけど、上手くいかなかった。同じ様な設定で行けるはずなんだけど...
そうそう、自分のサーバーからメールを送る時は postfix あたりを使うと良いらしい。暇が出来たら試してみたいね。
$ sudo apt-get install postfix
config.action_mailer.delivery_method = :sendmail
Note that the official repo lives now on https://github.com/smartinez87/exception_notification.
ReplyDeleteAlso, with the latest version you don't need the `require` on this line `gem 'exception_notification', :require => 'exception_notifier'` anymore.
Thank you for your comment, and reading my blog entry.
DeleteI'll note your comment in this entry.
Thanks again.
This comment has been removed by the author.
ReplyDelete