1

私は 2 つの環境を持ってstagingおりproduction、1 つのサーバーに capistrano 3 をデプロイしています。

  • をデプロイすると、すべての cron ジョブが削除され、リリース パスと環境stagingを参照するジョブに置き換えられます。stagingすべてのproductionジョブが削除されます。
  • をデプロイすると、すべての cron ジョブが削除され、リリース パスと環境productionを参照するジョブに置き換えられます。productionすべてのstagingジョブが削除されます。
  • onでcaseステートメントを実行し、状況に合わせてジョブのみを設定した場合、が展開されると、cronjobs が完全にクリアされます。すべての仕事がなくなりました。schedule.rb@environmentwhen 'production'staging

次の 2 つの状況のいずれかに到達する必要があります。

  • 2 つのジョブ セット (1 つは 用staging、もう 1 つは 用) を用意し、それぞれがいずれかの環境のデプロイを通じて持続します (したがって、下の例では、リリース用とリリースproduction用の 2 つのジョブがリストされます) 。stagingproduction
  • 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
4

1 に答える 1

1

実際の cron ジョブを囲むコメント ブロックはありませんか? これ(およびこれだけ)を使用する古いRails 3アプリがあり、動作します。多分それは役立つでしょう:

config/deploy.rb:set :whenever_environment, defer { stage }
config/deploy.rb:set :whenever_identifier, defer { "#{application}_#{stage}" }
config/deploy.rb:set :whenever_command, 'bundle exec whenever'
于 2015-03-17T15:44:38.097 に答える