結論
gem のバージョンを以下のようにちゃんと指定しましょう。
gem 'sidekiq-cron', '~> 1.0.4'
具体的な状況
gem のインストールについて
バージョンを指定しないでインストールした場合
愚直に以下のように gem のバージョンを指定しないでインストールしたとします。
gem 'sidekiq-cron'
そうすると Gemfile.lock
の中身は以下のようになります。refus-scheduler
は依存関係において重要な役割を果たしています(いました)。
$ cat Gemfile.lock | grep sidekiq-cron sidekiq-cron (0.3.1) sidekiq-cron $ cat Gemfile.lock| grep rufus-scheduler rufus-scheduler (3.5.2) rufus-scheduler (>= 2.0.24)
バージョンを指定してインストールした場合
次に、冒頭のようにバージョンを指定してインストールしたとします。そのときの Gemfile.lock
の中身は次のようになります。rufus-scheduler
はインストールされません。
$ cat Gemfile.lock | grep sidekiq-cron sidekiq-cron (1.0.4) sidekiq-cron (~> 1.0.4)
gem のインストール方法(バージョン指定方法)の違いによる結果について
バージョンを指定しないでインストールした場合
gem のバージョンを指定しないでインストールした場合、Sidekiq-Cron
が発動すると以下のような Sidekiq
のログが出力されます。初回は実行されているのですが、それ以降は日付の比較に失敗していて*1、cron
が実行されていません。
2018-11-16T08:43:07.183Z 49149 TID-ow8extigg Hoge::Fuga JID-39322727b03932d173e9152e INFO: start 2018-11-16T08:43:12.152Z 49149 TID-ow8extigg Hoge::Fuga JID-39322727b03932d173e9152e INFO: done: 4.969 sec 2018-11-16T08:43:17.186Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: comparison of Time with EtOrbi::EoTime failed 2018-11-16T08:43:17.186Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: /Users/FOOBAR/APPNAME/vendor/bundle/ruby/2.5.0/gems/sidekiq-cron-0.3.1/lib/sidekiq/cron/job.rb:434:in `<' 2018-11-16T08:43:27.192Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: comparison of Time with EtOrbi::EoTime failed 2018-11-16T08:43:27.192Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: /Users/FOOBAR/APPNAME/vendor/bundle/ruby/2.5.0/gems/sidekiq-cron-0.3.1/lib/sidekiq/cron/job.rb:434:in `<' 2018-11-16T08:43:37.200Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: comparison of Time with EtOrbi::EoTime failed 2018-11-16T08:43:37.200Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: /Users/FOOBAR/APPNAME/vendor/bundle/ruby/2.5.0/gems/sidekiq-cron-0.3.1/lib/sidekiq/cron/job.rb:434:in `<' 2018-11-16T08:43:47.204Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: comparison of Time with EtOrbi::EoTime failed 2018-11-16T08:43:47.204Z 49149 TID-ow8dvg0bk ERROR: CRON JOB: /Users/FOOBAR/APPNAME/vendor/bundle/ruby/2.5.0/gems/sidekiq-cron-0.3.1/lib/sidekiq/cron/job.rb:434:in `<'
バージョンを指定してインストールした場合
gemのバージョン*2を指定した上でインストールすると、上記のエラーは出ず、綺麗な実行ログが繰り返されます。
2018-11-16T08:56:20.039Z 51094 TID-owlht7y1k Hoge::Fuga JID-84d069fed1a408fd168ec633 INFO: start 2018-11-16T08:56:20.115Z 51094 TID-owlht7y1k Hoge::Fuga JID-84d069fed1a408fd168ec633 INFO: done: 0.076 sec 2018-11-16T08:57:12.896Z 51094 TID-owlirrsd0 Hoge::Fuga JID-326062da619b680785bd302e INFO: start 2018-11-16T08:57:13.955Z 51094 TID-owlirrsd0 Hoge::Fuga JID-326062da619b680785bd302e INFO: done: 1.06 sec 2018-11-16T08:58:08.837Z 51094 TID-owlirrsj4 Hoge::Fuga JID-0b1042d5d2f21fd96b567cd4 INFO: start 2018-11-16T08:58:08.878Z 51094 TID-owlirrsj4 Hoge::Fuga JID-0b1042d5d2f21fd96b567cd4 INFO: done: 0.042 sec 2018-11-16T08:59:18.262Z 51094 TID-owlirrsj4 Hoge::Fuga JID-ac351176ab716181087cd982 INFO: start 2018-11-16T08:59:18.295Z 51094 TID-owlirrsj4 Hoge::Fuga JID-ac351176ab716181087cd982 INFO: done: 0.033 sec
備考
- ちゃんと公式のドキュメントを読む(一通り目を通す)
- Qiita や Stack Overflow だけをよりどころにしない
- Issue や プルリク にもざっとでいいので目を通す
- 上記はいい加減徹底したい
- ハマる時間を短くすることができるのはもちろん、そのgemに関する様々な知見が得られる
環境
- Ruby 2.5.3
- Rails 5.2.1