読者です 読者をやめる 読者になる 読者になる

rubyでslack通知

↓の記事でwhile readしないとうまく動かない理由がわかったので、slack通知の部分を変更した nanka.hateblo.jp

動かない理由はこちら nanka.hateblo.jp

改善版

require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("https://hooks.slack.com/services/*/*/*")

STDIN.each do |line|
  payload = {
    text: line,
    channel: ARGV[0],
    username: ARGV[1],
    icon_emoji: ARGV[2]
  }

  Net::HTTP.post_form(uri, { payload: payload.to_json })
end

tail -Fの結果をslackに流すだけなので、複数行の通知は諦めた(STDIN.readを使うとtail -FからEOFがやってこないので永遠に待ち状態になる)

STDIN.eachで標準入力を待ち構えて、やってきたら送信を繰り返すだけ

こうすることでやっと↓のように使える

tail -F logfile | ruby slack.rb "#room" "name" ":emoji:"