前提
Capistrano
だとか whenever
だとかの固有名詞は本質的に関係ありません。
結論
config/schedule.rb
の中に、シェルのコマンドに依存する記述を含めていたところ、ほぼまっさらなデプロイ先にデプロイしたらエラーが出た。
具体的には
こちらの記事 のとおりにして cron
の多重実行を防いでいたのですが、setlock
がインストールされていない環境先にデプロイしたら見事にエラーが出ました*1。
補足
ログ上では bundler: failed to load command: whenever
と出るため、bundler
がインストールされてないだとか
Gemfile
の問題だとか bundle install
の問題だとかいろいろ寄り道をしてしまいました。5時間くらいハマってました。
そしてよくログを読むと config/schedule.rb
の 13行目 が問題だとか書いてあって、もう本当にちゃんとログ読めよと自分を責めました。
加えて、config/schedule.rb
を修正しても、修正した内容を push していなかったためにどうして動かないのか悩み続けてしまいました。
備考
ハマりたくない。
あと、デプロイできても実行されない場合は十中八九*2、パスの設定がおかしいと思われます。Rails.root.join
を使う場合には 公式ドキュメント を一読しましょう。
ログの出力先の指定に失敗していると、cron 自体が失敗したことが分かりにくいので注意です。