2012-01-16 12 views
5

Mam projekt RubyOnRails i wdrożyłem go z Unicorn na nginx na serwerze Ubuntu.Jak mogę ponownie załadować Unicorn bez zabicia procesu głównego?

Muszę ponownie uruchomić Unicorn, jeśli zmienię jeden z plików konfiguracyjnych, ale spowoduje to wyłączenie mojej witryny, gdy zabiję główny proces Unicorn i rozpocznę go ponownie pod numerem bundle exec.

Czy istnieje sposób, aby Unicorn pracował z nowymi plikami, nie zabijając procesu i nie spadając?

Odpowiedz

8

W moim CAPISTRANO deploy.rb mam:

desc "Zero-downtime restart of Unicorn" 
task :restart, :except => { :no_release => true } do 
    run "kill -s USR2 unicorn_pid" 
end 

Jest to dobrze udokumentowane w "Lighting fast, zero-downtime deployments with git, capistrano, nginx and Unicorn".

+0

Zrobiłem pewne postępy z porad, dzięki ale teraz mam nowe błędy. kiedy wpisuję "restart cap" i wpisuję moje hasło, mam następujące: '** [out :: app_name] $ rvm_path (/root/.rvm/) nie istnieje. *** [err :: nazwa_aplikacji]/usr/local/rvm/bin/rvm-shell: linia 57: rvm: polecenie nie znaleziono *** [err :: nazwa_aplikacji] Błąd: RVM nie mógł użyć 'ruby -1.9.2-p290'' jeśli mogę zrozumieć wyniki z google, muszę zmienić moją ścieżkę rvm_path na "/ usr/local/rvm/bin" (jest to naprawdę istniejący katalog), ale nie mogę go znaleźć gdziekolwiek. – leitasat

+0

restartuje skrypt, który kodowałeś? W takim przypadku możesz dodać "rvm use 1.9.2" do skryptu, aby poinformować go o wersji rvm, której potrzebujesz. W przeciwnym razie zaznacz odpowiedź jako poprawną i otwórz nową dla problemu z rvm. Chętnie pomogę. – tommasop

+0

Okay, naprawiłem mój rvm (nie było konieczne klejnot) i teraz wydaje się, że Capistrano z pewnością wykonuje moją komendę, ale jednorożec i tak nie uważa moich zmian w plikach konfiguracyjnych. (na przykład liczba procesów roboczych lub ustawień bazy danych) – leitasat

0

Obie odpowiedzi, w tym zaakceptowana, są złe.

http://unicorn.bogomips.org/SIGNALS.html mówi wysłać HUP do procesu głównego.

desc "Zero-downtime restart of Unicorn" 
task :restart, :except => { :no_release => true } do 
    run "kill -s HUP `cat tmp/pids/unicorn.pid`" 
end 
+0

Pytanie nie było pytanie, jak RELOAD (co jest HUP), ale jak RESTART z wdziękiem, który jest już USR2 – tommasop

Powiązane problemy