Rails推迟了工作,指的是旧版本
我有一个运行在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。 我有一个共享文件夹中的pid,它们与我运行ps -ef | grep delayed_job
时获得的匹配 部署后ps -ef | grep delayed_job
。
我运行了2名工人( set :delayed_job_workers, 2
),我使用'capistrano3-delayed-job'(1.4.0)作为部署公式。
重新启动时,我在队列中有很多作业,但它与当时运行的视频编码作业不一致,可能会干扰某些作业(我终究保留了5个版本,因此即使作业正在倒数第二个,该文件夹应该仍然存在)。 尽管部署时可能会有很多较小的工作,但是DJ应该能够处理该问题并无论如何都可以正常启动?
看起来,工作人员仍然徘徊在某种程度,或者我错过了其他的东西?
在每次部署时重新启动延迟工作的工作人员并向最新版本发布信息时必须解决这个问题。
这有一个宝石
capistrano3延迟在职
如果你不想使用宝石追踪完整的信息。
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
链接地址: http://www.djcxy.com/p/65785.html