Как я могу создать идентичные задания 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