Clockwork で cron on Heroku

Heroku で cron したくて調べたらclockworkというgemがよさそうだったので使用してみた。 Gistでもよかったんだが、せっかくなのでブログにも書いてみた。

内容としては毎日指定した時間にLingr上でつぶやくbot

感想としてはClockworkの時間の指定の仕方がシンプルでよかった。

ENV['HOGE'] の部分は

heroku config:add hoge='hogehoge'

で登録できる。

# Gemfile
gem 'clockwork'
gem 'active_support'
# clock.rb
# encoding: utf-8
require 'clockwork'
require 'net/http'
require 'digest/sha1'
require 'active_support/time'

def work_or_study
  time = ( (Time.now.beginning_of_week - Time.new('1970 00:00:00')) / 60 / 60 / 24 / 7 ).to_i

  week = time.even? ? "学習" : "作業"
  "今日は#{week}週です。"
end

module Lingr
  class << self
    def inform(text)
      verifier = Digest::SHA1.hexdigest(ENV['BOTID'] + ENV['SECRET'])

      Net::HTTP.start('lingr.com', 80) do |http|
        http.get("/api/room/say?bot=#{ENV['BOTID']}&bot_verifier=#{verifier}&room=#{ENV['ROOMID']}&text=#{URI.escape(text)}")
      end
    end
  end
end

module Clockwork
  handler do |job|
    Lingr.inform(work_or_study)
    puts "Running #{job}"
  end

  every(1.day, 'Lingr', at: ['10:00', '21:00'])
end

これだと10時と、21時にbotがしゃべる。

最後に

Gistがシャレ乙になってたので、下書きをGistでかいてそのまま保存したので同じないようが二つあるというどうでもいい状態。