1

我有两个环境,staging并且production,在一台服务器上,使用 capistrano 3 进行部署。每个环境的部署相互冲突,完全取代了另一个环境的工作。

  • 如果我 deploy staging,那么所有的 cronjobs 都会被删除并替换为引用staging发布路径和环境的作业。所有production作业都被删除。
  • 如果我 deploy production,那么所有的 cronjobs 都会被删除并替换为引用production发布路径和环境的作业。所有staging作业都被删除。
  • 如果我在on中做了一个case声明,并且只为某种情况设置了作业,那么在部署时它会完全清除 cronjobs。所有的工作都消失了。schedule.rb@environmentwhen 'production'staging

我需要达到以下两种情况之一:

  • 有两组作业(一组 forstaging和一组 for production),每组作业都通过任一环境的部署持续存在(因此,在底部的示例中,将列出两个作业 - 一个用于staging发布,一个用于production发布)
  • 通过任一环境的部署持续存在的一组作业(仅用于production)(因此,staging部署不应将其删除)

谁能解释这是如何完成的?我在下面包含了我当前的配置,以防万一。

版本

  • 卡皮斯特拉诺:3.3.5
  • 任何时候:0.9.4
  • 红宝石:2.1.5
  • 导轨:3.2.21

头文件

require 'whenever/capistrano'

config/deploy/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)}" }

配置/时间表.rb

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

staging部署后生成的 cronjob

# 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
4

1 回答 1

1

您没有围绕实际 cron 作业的任何注释块吗?我有一个旧的 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'
于 2015-03-17T15:44:38.097 回答