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:"