Rails Capistrano - 每当 Cron 为每个部署附加 cron 作业时
Rails Capistrano - Whenever Cron appends cron jobs for every Deployment
我正在使用:
Ruby 1.9.3
whenever 0.9.4
Rails 3.2
and capistrano/whenever extension.
每当部署发生时,它都会在每次部署后向 crontab 文件添加条目。由于 5 次部署,crontab -l
中有 40 个条目,因为 schedule.rb 有 8 个 cron 条目。每个版本都有不同的条目。它不应该默认覆盖条目吗?
它会在 schedule.rb
文件中每次提到时重新创建条目。
我发现每当向 crontab 文件中添加一个 cron 作业时,每个 cron 作业都由包含 capistrano 发布目录路径的注释行分隔...像这样:
# Begin Whenever generated tasks for: /home/path/www/to/releases/2070527160502/config/schedule.rb
(您可以使用 crontab -e 查看原始 crontab 文件,看看其中放了什么)
下一次部署发生时,无论何时查看是否有以注释分隔的 cron 作业,但使用 new 版本号。它没有找到,所以它将新作业附加到 crontab 文件。
我解决此问题的方法是在 deploy.rb 中指定 update_crontab 任务,并指定 schedule.rb 的显式路径,如下所示:
namespace :deploy do
task :update_crontab do
on roles(:all) do
within current_path do
execute :bundle, :exec, :whenever, "--update-crontab", "~/path/to/current/config/schedule.rb"
end
end
end
end
after 'deploy:symlink:release', 'deploy:update_crontab'
因此 crontab 文件中的注释分隔符包含 'current' 路径而不是 'releases/nnnnnnnnnnn' 路径。
我怀疑这应该不是必需的,但在尝试解决问题一段时间后,这就是我最终得到的结果。
检查您是否正在设置
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
如果您不这样做,它将选择默认标识符,这是您的 config/schedule.rb 文件的扩展路径。
File.expand_path(@options[:file])
我正在使用:
Ruby 1.9.3
whenever 0.9.4
Rails 3.2
and capistrano/whenever extension.
每当部署发生时,它都会在每次部署后向 crontab 文件添加条目。由于 5 次部署,crontab -l
中有 40 个条目,因为 schedule.rb 有 8 个 cron 条目。每个版本都有不同的条目。它不应该默认覆盖条目吗?
它会在 schedule.rb
文件中每次提到时重新创建条目。
我发现每当向 crontab 文件中添加一个 cron 作业时,每个 cron 作业都由包含 capistrano 发布目录路径的注释行分隔...像这样:
# Begin Whenever generated tasks for: /home/path/www/to/releases/2070527160502/config/schedule.rb
(您可以使用 crontab -e 查看原始 crontab 文件,看看其中放了什么)
下一次部署发生时,无论何时查看是否有以注释分隔的 cron 作业,但使用 new 版本号。它没有找到,所以它将新作业附加到 crontab 文件。
我解决此问题的方法是在 deploy.rb 中指定 update_crontab 任务,并指定 schedule.rb 的显式路径,如下所示:
namespace :deploy do
task :update_crontab do
on roles(:all) do
within current_path do
execute :bundle, :exec, :whenever, "--update-crontab", "~/path/to/current/config/schedule.rb"
end
end
end
end
after 'deploy:symlink:release', 'deploy:update_crontab'
因此 crontab 文件中的注释分隔符包含 'current' 路径而不是 'releases/nnnnnnnnnnn' 路径。
我怀疑这应该不是必需的,但在尝试解决问题一段时间后,这就是我最终得到的结果。
检查您是否正在设置
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
如果您不这样做,它将选择默认标识符,这是您的 config/schedule.rb 文件的扩展路径。
File.expand_path(@options[:file])