/ / Właściwe wdrożenie aplikacji Rails z Miną i Foremanem - ruby-on-rails, ruby, brygadzista, mina

Prawidłowe wdrożenie aplikacji Railsowej z Miną i Foremanem - ruby-rails, ruby, majster, mina

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 № 1

OK, 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.