Rialsアプリケーションで500などのエラーが起きたときにslackに通知する機能を実装してみます。
exception_notificationとslack-notifierの追加
slack通知はexception_notificationとslack-notifierというgemを追加すれば簡単に実装できます。
gem 'exception_notification', :github => 'smartinez87/exception_notification' gem 'slack-notifier'
これらをgemファイルに追記し、bundle installします。
例外時の通知の設定
例外時の通知を設定するファイルを作成します。
bundle exec rails g exception_notification:install
exception_notification.rbに下記のようにslackの通知設定を行います。
config.add_notifier :slack, { :webhook_url => "webhook_url", :channel => "#チャンネル名" }
webhook_urlは下記のようにして取得します。
- https://”your_slack_name”slack.com/services/new
- Incoming WebHooksで検索して追加する。
- 「チャンネルへの投稿」で通知を飛ばしたいチャンネルを選択して設定を保存。
- Webhook URLをコピーする
例外発生時の処理を設定
application_controller.rbで例外発生時のslack通知のメッセージ内容を設定します。
rescue_from Exception, with: :render_500 def render_500(e) ExceptionNotifier.notify_exception(e, :env => request.env, :data => {:message => "error"}) render template: 'errors/error_500', status: 500 end
例外じゃないときもslack通知を実装
slack通知は例外のときだけに使えるものではありません。
例えば、ログイン失敗したユーザーがいたときに通知するには、下記のような処理をuser_sessions_controllerのログイン失敗時の処理内に書けばOKです。
notifier = Slack::Notifier.new('webhook_url') notifier.ping('ログイン失敗')
ウェブサービスで、起きてほしくないイベントが起きたときにslackに通知するように設定しておくと、早く気付けて便利ですね。
Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。