Как я могу создать идентичные задания cron для постановки и производства с помощью камня всегда?

У меня есть одна работа в 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"

Это прекрасно работает и создает работу, когда я развертываю любую среду. Проблема заключается в том, что всякий раз, когда они рассматриваются как одно задание, оно перезаписывается в зависимости от того, какая среда была развернута в последний раз:

# 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

Какой разумный способ добавить одно и то же задание cron для двух отдельных сред на одном сервере?

2 ответа

Решение

Вы можете использовать пространство имен для любых задач, используя что-то похожее на следующее:

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

В приведенном выше примере stage переменная, которая содержит среду Измените это на то, что вы используете.

Раздел интеграции с Capistrano по адресу https://github.com/javan/whenever будет немного более подробным, если вам это нужно.

Для capistrano-v3-интеграция добавить require "whenever/capistrano" в Capfile и установить set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" } в config/deploy.rb

Другие вопросы по тегам