私は 2 つの環境を持ってstaging
おりproduction
、1 つのサーバーに capistrano 3 をデプロイしています。
- をデプロイすると、すべての cron ジョブが削除され、リリース パスと環境
staging
を参照するジョブに置き換えられます。staging
すべてのproduction
ジョブが削除されます。 - をデプロイすると、すべての cron ジョブが削除され、リリース パスと環境
production
を参照するジョブに置き換えられます。production
すべてのstaging
ジョブが削除されます。 - onで
case
ステートメントを実行し、状況に合わせてジョブのみを設定した場合、が展開されると、cronjobs が完全にクリアされます。すべての仕事がなくなりました。schedule.rb
@environment
when 'production'
staging
次の 2 つの状況のいずれかに到達する必要があります。
- 2 つのジョブ セット (1 つは 用
staging
、もう 1 つは 用) を用意し、それぞれがいずれかの環境のデプロイを通じて持続します (したがって、下の例では、リリース用とリリースproduction
用の 2 つのジョブがリストされます) 。staging
production
production
いずれかの環境のデプロイを通じて持続する1 セットのジョブ (のみ) (したがって、staging
デプロイはそれを削除しないでください)
誰でもこれがどのように行われるか説明できますか? 役立つ場合に備えて、現在の構成を以下に含めます。
バージョン
- カピストラーノ: 3.3.5
- いつでも: 0.9.4
- ルビー: 2.1.5
- レール: 3.2.21
キャップファイル
require 'whenever/capistrano'
config/deploy/deploy.rb の関連する行
set :application, 'application_name'
構成/デプロイ/production.rb
server '1.2.3.4', user: 'username', roles: %w{web app}
set :branch, 'master'
set :deploy_to, '/home/username/production'
set :rails_env, 'production'
set :stage, :production
set :whenever_environment, -> { fetch(:stage) }
set :whenever_identifier, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
構成/デプロイ/staging.rb
server '1.2.3.4', user: 'username', roles: %w{web app}
set :branch, 'staging'
set :deploy_to, '/home/username/staging'
set :rails_env, 'staging'
set :stage, :staging
set :whenever_environment, -> { fetch(:stage) }
set :whenever_identifier, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
config/schedule.rb
set :output, '/log/cron.log'
every 10.minutes do
runner 'ModelName.method_name'
end
staging
デプロイ後の結果の cronjob
# Begin Whenever generated tasks for: application_name
0,10,20,30,40,50 * * * * /bin/bash -l -c 'cd /home/username/staging/releases/20150317012814 && script/rails runner -e staging '\''ModelName.method_name'\'' >> /log/cron.log 2>&1'
# End Whenever generated tasks for: application_name