Slack là một phần mềm Worksplace sử dụng thông dụng rộng rãi. Tuy nhiên, ta có thể sử dụng slack để theo dõi và giám sát hệ thống, gửi tin nhắn tự động.
Sau đây, mình sẽ hướng dẫn mọi người cách để gửi thông báo, tin nhắn … đến slack trong rails app, nó làm cho Rails Application của bạn có thể trở nên năng động và hiệu quả hơn.
Setup Slack:
Đầu tiên, bạn phải có 1 Worksplace, 1 channel nào đó rồi nhé.
- Bạn cần tạo một App Slack từ https://api.slack.com/apps, chọn Create an app → From Scratch (điền tên và chọn workspace)
- Chọn tab Incoming Webhooks bạn sẽ có:
- Webhook URL
- Channel
Setup Rails:
Đầu tiên, bạn tự thêm gem vào trong Gemfile và Bundle nhé.
1. Sử dụng slack-notifier
gem "slack-notifier"
https://github.com/slack-notifier/slack-notifier- Tạo 1 module SlackNotifier để tiện cho việc gọi khi cần.
- ENV[‘SLACK_WEBHOOK_URL’], ENV[‘SLACK_CHANNEL_SLACK’] bạn lấy ở bên trên.
- ENV[‘SLACK_USERNAME_SLACK’] bạn đặt tự do.
Ruby
#config/initializers create slack_notifier.rb
module SlackNotifier
CLIENT = Slack::Notifier.new(
ENV['SLACK_WEBHOOK_URL'],
channel: ENV['SLACK_CHANNEL_SLACK'],
username: ENV['SLACK_USERNAME_SLACK']
)
end
SlackNotifier::CLIENT.ping "Hello Everybody!"
SlackNotifier::CLIENT.ping "TEST SLACK NOTIFICATION"
- Kết quả
- Ngoài ra, bạn có thể custom nhiều hơn nữa, xem thêm tại https://github.com/slack-notifier/slack-notifier
2. Sử dụng exception-notification
- Gem này sẽ tự động gửi exception về slack của bạn khi Rails App xảy exception. Nó giúp việc giám sát hệ thống, giúp bạn nhanh chóng kiểm tra, sửa chữa kịp thời.
gem exception_notification
https://github.com/smartinez87/exception_notification- Nếu ở production: config/environments/production.rb
Ruby
#config/environments/development.rb
Rails.application.config.middleware.use ExceptionNotification::Rack, slack: {
webhook_url: ENV['SLACK_WEBHOOK_URL'],
channel: ENV['SLACK_CHANNEL_NAME']
}
- Đặt ở nơi bạn muốn push notify nhé.
Ruby
rescue_from StandardError do |e|
ExceptionNotifier.notify_exception(e,
data: {
# custom message ...
messages: e.messages
date: Date.current
}
)
end
- Kết quả
- Ngoài ra, bạn có thể custom nhiều hơn nữa, xem thêm tại https://github.com/smartinez87/exception_notification
Hi vọng bài viết sẽ giúp ích được mọi người.
Cảm ơn mọi người.
1 comment
Bài viết của bạn bị bug chỗ này nè :v
#config/environments/development.rb
Rails.application.config.middleware.use ExceptionNotification::Rack, slack: {
webhook_url: ENV[‘SLACK_WEBHOOK_URL’],
channel: ENV[‘SLACK_CHANNEL_NAME’]
}
}