LoginSignup
2
2

More than 5 years have passed since last update.

rubyでclockwork を使ったときのNoMethodError対処方法

Posted at

railsで、ではなくrubyでclockworkを使ったときにNoMethodErrorが出たのでその対処法

環境

  • ruby 2.5.1
  • clockwork 2.0.3

簡単な処理を動かしてみます

clock.rb
require 'clockwork'
include Clockwork

def one_minute
  p "minutely job"
end

def one_hour
  p "hourly job"
end

handler do |job|
  self.send(job.to_sym)
end

every(1.minute, 'one_minute')
every(1.hour, 'one_hour')

$ clockwork clock.rb
...
...
/Users/user/hoge/clock.rb:18:in `<module:Clockwork>': undefined method `minute' for 1:Integer(NoMethodError)

と、このようなエラーが

Integerクラスには`minute'なんてメソッドはないよ というエラーなのでActive Supportをいれてあげます。

Active Supportとは

Object、String、Array、Hash、DateといったRubyの基本的なクラスに便利なメソッドを追加してくれるライブラリ
railsにはデフォルトでAcrive Supportが組み込まれているので、blank?メソッドなどが使えます。

対処法

IntegerクラスのminuteメソッドもActive supportが追加してくれるので、gem installしましょう

Gemfile
...
...
gem 'clockwork'
gem 'activesupport'
$ bundle install

requireも忘れずに

clock.rb
require 'clockwork'
#追加
require 'active_support/all'
include Clockwork
...
...
every(1.minute, 'one_minute')
every(1.hour, 'one_hour')
$ clockwork clock.rb
I, [2018-09-22T20:16:47.890148 #14730]  INFO -- : Starting clock for 2 events: [ one_minute one_hour ]
I, [2018-09-22T20:16:47.890641 #14730]  INFO -- : Triggering 'one_minute'
"minutely job"
I, [2018-09-22T20:16:47.890853 #14730]  INFO -- : Triggering 'one_hour'
"hourly job"
I, [2018-09-22T20:17:47.001826 #14730]  INFO -- : Triggering 'one_minute'
"minutely job"

上手くいきました

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2