为什么我们在将代码部署到服务器时需要停止 resque worker?
这是我的部署文件的一部分。我发现代码中可能存在错误:
namespace :resque do
desc "Start resque workers"
task :start do
# Start two workers with separate run commands, so we can store their PIDs
# Hacky, but works
run "if [ ! -e #{deploy_to}/shared/pids/resque_production_1.pid ]; then cd #{deploy_to}/current && RAILS_ENV=production QUEUE=* PIDFILE=#{deploy_to}/shared/pids/resque_production_1.pid BACKGROUND=yes VERBOSE=1 bundle exec rake environment resque:work; fi;"
run "if [ ! -e #{deploy_to}/shared/pids/resque_production_2.pid ]; then cd #{deploy_to}/current && RAILS_ENV=production QUEUE=* PIDFILE=#{deploy_to}/shared/pids/resque_production_2.pid BACKGROUND=yes VERBOSE=1 bundle exec rake environment resque:work; fi;"
end
desc "Stop resque workers"
task :stop do
run "if [ -e #{deploy_to}/shared/pids/resque_production_2.pid ]; then echo \"Killing Worker #1\"; kill -s QUIT `cat #{deploy_to}/shared/pids/resque_production_2.pid`; rm -f #{deploy_to}/shared/pids/resque_production_2.pid; echo \"Done\"; fi;"
run "if [ -e #{deploy_to}/shared/pids/resque_production_2.pid ]; then echo \"Killing Worker #2\"; kill -s QUIT `cat #{deploy_to}/shared/pids/resque_production_2.pid`; rm -f #{deploy_to}/shared/pids/resque_production_2.pid; echo \"Done\"; fi;"
end
似乎有一些错误:
# stop resque worker
/resque_production_2.pid
他们俩都杀死 /resque_production_2.pid ...这意味着其中一名工人在部署期间没有被杀死...您认为这会导致任何问题吗...
因为我最近发现我的一项 resque 作业无法排队到生产服务器中的队列中。并且没有在列表中显示失败。可能是由这个引起的吗?但它在登台服务器中工作正常。生产服务器中的其他 resque 作业也可以正常工作。这很奇怪。