1

У меня есть две среды: staging и production, на одном сервере, которые развертываются с помощью capistrano 3. Развертывания для каждой среды clobber друг друга, полностью заменяя задания другой среды.Как я могу хранить/капрано от перезаписи заданий для других сред?

  • Если я раскрываю staging, то все cronjobs удалены и заменен на рабочих ссылки на пути staging выпуска и окружающую среду. Все задания production удалены.
  • Если я развожу production, то все cronjobs удаляются и заменяются заданиями, ссылающимися на путь выпуска и окружение production. Все задания staging удалены.
  • Если я делаю case заявление в schedule.rb на @environment, и только рабочие места, установленные для when 'production' ситуации, а затем, когда staging развернут он полностью очищает cronjobs. Все рабочие места исчезли.

Мне нужно, чтобы добраться до любого из этих двух ситуаций:

  • два набора рабочих мест (один для staging и один для production), что каждый сохраняются через Deploy либо по окружающей среде (так, в моем примере в нижней части, там будет два задания, перечисленные - один для выпуска staging и один для выпуска production)
  • Один набор заданий (только для production), которая сохраняется через Deploy либо по окружающей среде (это так, staging развертывания не следует вынимать это)

Может ли кто-нибудь объяснить, как это делается? Ниже приведена моя текущая конфигурация, если это полезно.

Версии

  • Capistrano: 3.3.5
  • всякий раз, когда: 0.9.4
  • рубин: 2.1.5
  • рельсы: 3.2.21

Capfile

require 'whenever/capistrano' 

соответствующую строку в конфигурации/развернуть/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)}" } 

Конфигурация/график.гь

set :output, '/log/cron.log' 
every 10.minutes do 
    runner 'ModelName.method_name' 
end 

Полученный cronjob после staging развертывания

# 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 

ответ

1

У вас нет каких-либо блоков комментариев окружающих фактические хрон рабочих мест? У меня есть старое приложение 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' 
+0

О, этот вопрос кажется полезным! Кажется, что когда-либо используется значение ': application' вместо значения': when_identifier'. Я обновил свой вопрос с информацией из файла 'deploy.rb' и окружающих комментариев в crontab. –