Do celów produkcyjnych potrzebuję trzech uruchomionych procesów. To jest mój plik i używam Foremana, aby je uruchomić:
web: bundle exec rails s Puma -p $PORT
queuing: bundle exec clockwork clock.rb
workers: bundle exec rake resque:workers
Do wdrożenia używam Miny. Jaki jest właściwy sposób rozpoczęcia Foreman pod koniec zadania wdrażania? Obecnie zaczynam tak:
desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :"git:clone"
invoke :"deploy:link_shared_paths"
invoke :"bundle:install"
invoke :"rails:db_migrate"
invoke :"rails:assets_precompile"
to :launch do
queue "touch #{deploy_to}/tmp/restart.txt"
queue "bundle exec foreman start"
end
end
end
... ale nie sądzę, że jest to właściwy sposób, ponieważ polecenie „mina deploy” nigdy nie kończy działania, a lokalna konsola po prostu zaczyna generować cokolwiek te procesy.
Pytanie drugie: Jak zainicjować rejestrowanie dla każdego z tych trzech procesów osobno w osobnych plikach?
Jak mogę zapobiec zabiciu wszystkich tych trzech procesów, gdy jeden z nich ulega awarii? Jak zrestartować proces po awarii?
Dzięki!
Odpowiedzi:
0 dla odpowiedzi № 1OK, więc to są 3 pytania.
1) Myślę, że chcesz odłączyć proces brygadzisty od terminala. W ten sposób proces wdrażania zakończy się, a proces majster będzie działał nawet po rozłączeniu się z serwerem. nohup
jest do tego świetny, np. to uruchomi twoją aplikację i potokuje wszystkie logi do server.log
plik:
nohup foreman start > server.log 2>&1 &
2) AFAIK, majster nie pozwala ci tego zrobić. Prawdopodobnie powinieneś skorzystać z innej usługi zarządzania procesami (np. Systemd, upstart). Na szczęście brygadzista umożliwia łatwe eksportowanie konfiguracji do różnych formatów zarządzania procesami (http://ddollar.github.io/foreman/#EXPORTING).
3) Ponownie, prawdopodobnie chcesz oddzielić swoje procesy i zarządzać nimi osobno poprzez upstart, systemd itp.