task :restart_unicorn, :except => { :no_release => true } do
run "#{try_sudo} kill -s USR2 $(cat /var/www/app_name/shared/pids/unicorn.pid)"
end
dağıtmak aşağıdaki eski kod kullanmaya devam eder, ne olur, yeni bir boynuzlu at usta yaratılmış olmasıdır ve eski bir adının (old)
eklenen etmiştir. Eski olanı asla öldürmez, ama kendi başıma öldürsem bile, yeni tek boynuzlu at koşulu hala eski kodu benim konuşmamdan önce gösteriyor. Yeni örnek, eskisiyle aynı yaratım zamanına sahiptir - onun sadece kopyalanması gibi. Örneği durdurursam ve tekrar başlatırsam çalışır, ancak sıfır kapalı kalma dağıtımını yapabilmek isterim.
Herhangi bir yardım için teşekkür ederiz.
old_pid = get_pid('/var/www/appname/shared/pids/unicorn.pid')
run "#{try_sudo} kill -s SIGUSR2 $(cat /var/www/appname/shared/pids/unicorn.pid)"
/var/www/app/current/tmp/pids/unicorn.pid)"
run "#{try_sudo} kill -s SIGWINCH #{old_pid}"
Bu pid üzerinde SIGUSR2 çalışır ve eski boynuzlu at süreci öldürür:
DÜZENLEME
sugest İlya O. izledikten sonra, ben bunu yapan bir capistrano görevi yarattı. Sorun şu ki, tüm uygulama sunucum son zamanlarda dağıtılan koduma hiçbir zaman güncellenmemiştir, bu görev sadece eski tek boynuzlu at ortamımı yeni bir sürece kopyalamak gibi görünüyor. Usta süreci öldürdüğümde ve tekrar tek boynuzlu at yeniden başlasa iyi çalışır, ama sonra bir dakika veya düşmüş istekleri vardır.
Evet, 'preload_app' true olarak ayarlandı. Harika bilgi!Tek sorum, eski tek boynuzlu at süreçlerinin ne olduğunu tanımlamanın en iyi yolu nedir? –
.oldbin ya da (eski) eski işlemin ismine eklenecektir, böylece tekdüzen ve eski –
için bir 'grep'ye' ps' baslatabilirsiniz. Şimdiye kadar sunduğun yardım için teşekkürler. –