1

私は1つの仕事をしていschedule.rbます:

set :output, File.expand_path('../log/whenever.log', __FILE__)
set :job_template, "bash -l -c 'source ~/.bashrc ; :job'"

every 1.day, :at => '12:01 am' do
  runner "MyModel.do_something"
end

私のステージング展開(bash)スクリプトには、cronに書き込む次の行があります。

ssh $SERVER "cd $DEPLOY_TO && whenever --set environment=staging -w"

そして、本番デプロイメントスクリプトのこの行は次のとおりです。

ssh $SERVER "cd $DEPLOY_TO && whenever --set environment=production -w"

これは正常に機能し、どちらかの環境をデプロイするとジョブが作成されます。問題は、両方を1つのジョブと見なすと、最後にデプロイされた環境によって上書きされることです。

# Begin Whenever generated tasks for: /Users/simon/apps/myapp/staging/config/schedule.rb
1 0 * * * bash -l -c 'source ~/.bashrc ; cd /Users/simon/apps/myapp/staging && script/rails runner -e staging 'MyModel.do_something' >> /Users/simon/apps/myapp/staging/log/whenever.log 2>&1'

# End Whenever generated tasks for: /Users/simon/apps/myapp/staging/config/schedule.rb

と...

# Begin Whenever generated tasks for: /Users/simon/apps/myapp/production/config/schedule.rb
1 0 * * * bash -l -c 'source ~/.bashrc ; cd /Users/simon/apps/myapp/production && script/rails runner -e production 'MyModel.do_something' >> /Users/simon/apps/myapp/production/log/whenever.log 2>&1'

# End Whenever generated tasks for: /Users/simon/apps/myapp/production/config/schedule.rb

同じサーバー上の2つの別々の環境に同じcronジョブを追加するための賢明な方法は何ですか?

4

2 に答える 2

4

次のようなものを使用して、いつでもタスクに名前空間を付けることができます。

# Whenever
set :whenever_environment, defer { stage }
set :whenever_identifier, defer { "#{application}-#{stage}" }
require "whenever/capistrano"

上記の例でstageは、は環境を含む変数です。使用しているものに変更してください。

必要に応じて、 https://github.com/javan/Capistrano統合セクションでもう少し詳しく説明します。

于 2011-10-18T14:23:35.023 に答える
0

capistrano-v3-integrationの場合、に 追加require "whenever/capistrano"Capfileて設定set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }しますconfig/deploy.rb

于 2016-01-20T06:09:28.153 に答える