Разверните приложение NodeJS с помощью pm2 и Capistrano

Разрабатываю проект на NodeJs, pm2, Capistrano 3.

Столкнулись с проблемой простоя при развертывании приложения Node с помощью Capistrano.

развернуть.rb:

set :linked_dirs, ['node_modules', 'logs']
set :linked_files, ['ecosystem.json']

set :npm_flags, '--silent --no-spin'

before 'deploy:updated', 'assets:upload'
after 'deploy:updated', 'assets:webpack'
after 'deploy:publishing', 'pm2:restart'

assets:upload — создает файлы js и css и загружает их в CDN. Сборка выполняется с помощью Webpack, поэтому создается файл webpack-assets.json.

assets:webpack — загружает webpack-assets.json на серверы prod. webpack-assets.json использует узел для получения точного имени актива, поскольку он содержит хэш:

task :webpack do
    run_locally do
        roles(:web).each do |host|
            execute :rsync, '-rvzu', "themes-assets.json", "#{host.user}@#{host.hostname}:#{fetch(:release_path)}"
            execute :rsync, '-rvzu', "webpack-assets.json", "#{host.user}@#{host.hostname}:#{fetch(:release_path)}"
        end
    end
end

pm2:restart - должен выполнять нулевую перезагрузку. Но на самом деле я получаю 1 секунду простоя. Если я выполняю эту задачу самостоятельно, простоев не бывает.

def restart_app
        within current_path do
            execute :pm2, :startOrRestart, fetch(:deploy_to) + '/shared/ecosystem.json'
        end
    end

Журналы pm2 показывают следующую ошибку

Process with pid 123169 still not killed, retrying...

person Arseny Korotaev    schedule 24.11.2016    source источник
comment
Это руководство может вам помочь: подобные развертывания   -  person Unitech    schedule 24.11.2016
comment
возможно, это оффтоп, но есть инструмент под названием shipit — github.com/shipitjs/shipit, который является Клон capistrano на Node.js — возможно, его стоит проверить (об этом есть короткая видеотрансляция: youtu.be/8PpBySjkWEM)   -  person wojtekk    schedule 18.03.2019


Ответы (1)


Вместо

pm2 startOrRestart <app|conf>

Вы должны использовать

pm2 startOrReload <app|conf>

Если вы все еще видите время простоя при использовании startOrReload, взгляните на: http://pm2.keymetrics.io/docs/usage/signals-clean-restart/#graceful-start

person Unitech    schedule 24.11.2016
comment
Я реализовал это решение, но это все еще время простоя - person Arseny Korotaev; 24.11.2016
comment
Можете ли вы заменить вхождение startOrRestart в вашем файле capistrano на startOrReload? - person Unitech; 24.11.2016
comment
Проблема возникает только при использовании cap production deploy. Если попробовать cap production pm2:restart все ок. - person Arseny Korotaev; 25.11.2016