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