使用pm2和Capistrano

时间:2016-11-24 09:14:08

标签: node.js capistrano pm2

我基于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...

1 个答案:

答案 0 :(得分:0)

而不是

pm2 startOrRestart <app|conf>

你必须使用

pm2 startOrReload <app|conf>

如果您在使用&#34; startOrReload&#34;时仍然看到停机时间,请查看:http://pm2.keymetrics.io/docs/usage/signals-clean-restart/#graceful-start