我在用:
Ruby 1.9.3
whenever 0.9.4
Rails 3.2
and capistrano/whenever extension.
每当部署发生时,它都会在每次部署后将条目添加到 crontab 文件中。由于 5 次部署, 中有 40 个条目crontab -l
,因为 schedule.rb 有 8 个 cron 条目。每个版本都有不同的条目。它不应该默认覆盖条目吗?
它重新创建文件中每次提到的条目schedule.rb
。
我在用:
Ruby 1.9.3
whenever 0.9.4
Rails 3.2
and capistrano/whenever extension.
每当部署发生时,它都会在每次部署后将条目添加到 crontab 文件中。由于 5 次部署, 中有 40 个条目crontab -l
,因为 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 作业,但使用新的版本号。它没有找到,因此它将新作业附加到 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 文件中的注释分隔符包含“当前”路径,而不是“发布/nnnnnnnnnn”路径。
我怀疑这不应该是必要的,但在尝试解决问题一段时间后,这就是我最终的结果。
检查您是否正在设置
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
如果不这样做,它将选择默认标识符,即 config/schedule.rb 文件的扩展路径。
File.expand_path(@options[:file])