capisranoでwheneverの設定を更新


結論

Capfile に以下の設定を追加するのみでよかったです。

deploy.rb で設定を上書きするような記事もありましたが、

普通の使い方をするのであれば上書きしなくて ok な気がします。

# 以下を追加

require 'whenever/capistrano'


config/deploy.rb

# ここでは何も指定しない



実行されるコマンド

dryrun で実行確認したところ、コマンドは以下のように出ていました。

migration した後のタイミングで、 crontab の更新がくるようです。

application = fetch(:application)

environment = fetch(:rails_env)

00:00 deploy:migrating

01 RBENV_ROOT=/usr/local/rbenv RBENV_VERSION=2.6.3 /usr/local/rbenv/bin/rbenv exec bundle exec rake db:migrate
00:00 whenever:update_crontab
01 RBENV_ROOT=/usr/local/rbenv RBENV_VERSION=2.6.3 /usr/local/rbenv/bin/rbenv exec bundle exec whenever --update-crontab {application} --set environment={ENV} --roles=app,db


実装を確認

特殊なことをしたい時は、以下の値を set しておけば上書きできるようになっていましたが、余計なことはしなくてもやりたいことができたのでそのままにしました。


recipes.rb

# whenever-0.11.0/lib/whenever/capistrano/v2/recipes.rb

Whenever::CapistranoSupport.load_into(self)

_cset(:whenever_roles) { :db }
_cset(:whenever_options) { {:roles => fetch(:whenever_roles)} }
_cset(:whenever_command) { "whenever" }
_cset(:whenever_identifier) { fetch :application }
_cset(:whenever_environment) { fetch :rails_env, fetch(:stage, "production") }
_cset(:whenever_variables) { "environment=#{fetch :whenever_environment}" }
_cset(:whenever_update_flags) { "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" }
_cset(:whenever_clear_flags) { "--clear-crontab #{fetch :whenever_identifier}" }
_cset(:whenever_path) { fetch :latest_release }

( 省略 )