Разрабатываю проект на 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...