gpt4 book ai didi

ruby-on-rails - 如何使用 whenever gem 创建用于暂存和生产的相同 cron 作业?

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:24 24 4
gpt4 key购买 nike

我在 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 作业的明智方法是什么?

最佳答案

您可以使用类似于以下内容的方式为您的 whenever 任务命名空间:

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

在上面的例子中,stage 是包含环境的变量。将其更改为您正在使用的任何内容。

Capistrano 集成 部分位于 https://github.com/javan/whenever如果您需要,我们会更详细一些。

关于ruby-on-rails - 如何使用 whenever gem 创建用于暂存和生产的相同 cron 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com