Rails推迟了旧版本的工作

时间:2015-09-07 13:14:32

标签: ruby-on-rails delayed-job capistrano3 ruby-on-rails-4.2

我有一个在Rails 4.2上运行的项目,并使用delayed_job(4.0.6)作为后台作业。我现在已经有一个问题,因为视频编码在查找要处理的文件时失败了几周。错误消息包含Capistrano(3.4.0)之前已经删除的旧版本路径。

No such file or directory @ rb_sysopen - /var/www/apps/<app>/releases/20150906031337/static/post_assets/videos/000/436/600/original.mov

Capistrano将自动删除旧版本,这很好(我保留了5个版本),但我在每次部署时都重新启动delayed_job。我有一个共享文件夹中的pids,它们与我在部署后运行ps -ef | grep delayed_job后获得的那些匹配。

我运行了2名工作人员(set :delayed_job_workers, 2)并且我使用了#capistrano3-delayed-job&#39; (1.4.0)部署公式。

我在重新启动时队列中有很多作业,但它与当时正在运行的视频编码作业不一致,可能是干扰或其他事情(毕竟我确实保留了5个版本,所以甚至如果作业在倒数第二个上运行,则该文件夹应该仍然存在)。有很多较小的工作虽然可能在部署时运行,但DJ应该能够处理并正常重启正确吗?

似乎工人仍然在某种程度上挥之不去,或者我错过了其他什么?

1 个答案:

答案 0 :(得分:0)

在每次部署时重新启动延迟的作业工作者并且最终版本必须解决此问题。

这是

的宝石

capistrano3-delayed-job

如果您不想使用gem follow获取完整信息。

https://github.com/collectiveidea/delayed_job/wiki/Delayed-Job-tasks-for-Capistrano-3#if-you-dont-want-to-use-a-gem

如果需要,请参考https://github.com/imnithin/capistrano3

如果由于版本不匹配而不支持这些任务,请从cap3执行自定义命令。

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      execute :touch, release_path.join('tmp/restart.txt')
      execute "cd '#{release_path}' && RAILS_ENV=#{fetch(rails_env)} script/delayed_job -n 2 restart"
    end
  end
end