約束の地

キャロ組

Capistrano で whenever をデプロイしようとしたらドハマリした

前提

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 自体が失敗したことが分かりにくいので注意です。

*1:別の環境では setlock がインストールされていた

*2:個人的感覚

Powered by はてなブログ