我基于NodeJs开发项目,pm2,Capistrano 3.
在使用Capistrano部署Node应用程序时面临停机问题。
deploy.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。 Build使用Webpack执行,因此它创建了webpack-assets.json。
assets:webpack - 将webpack-assets.json上传到prod服务器。 webpack-assets.json按节点使用来获取确切的资产名称,因为它包含hash:
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 logs显示以下错误
Process with pid 123169 still not killed, retrying...
答案 0 :(得分:0)
而不是
pm2 startOrRestart <app|conf>
你必须使用
pm2 startOrReload <app|conf>
如果您在使用&#34; startOrReload&#34;时仍然看到停机时间,请查看:http://pm2.keymetrics.io/docs/usage/signals-clean-restart/#graceful-start