2016-11-24 37 views
1

部署應用程序的NodeJS我開發基於的NodeJS,PM2項目,Capistrano的3與PM2和Capistrano的

與停機時間的問題,而面對與Capistrano的部署節點的應用程序。

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' 

資產:上傳 - 建立JS和CSS文件,並上傳到CDN。構建使用Webpack執行,因此它創建webpack-assets.json。

資產: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:重啓 - 應該執行零時間重裝。但事實上,我正在倒計時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... 
+0

本教程可能會幫助您:http://pm2.keymetrics.io/docs/tutorials/capistrano-like-deployments – Unitech

回答

0

而不是

pm2 startOrRestart <app|conf> 

你必須使用

pm2 startOrReload <app|conf> 

如果你仍然可以看到一個停機時間,同時使用「startOrReload 「, 看一下:http://pm2.keymetrics.io/docs/usage/signals-clean-restart/#graceful-start

+0

我實現了[this](https://semaphoreci.com/community/tutorials/how部署節點 - js-applications-with-capistrano)解決方案,但它仍然停機 –

+0

您可以用「startOrReload」替換capistrano文件中的「startOrRestart」嗎? – Unitech

+0

只有使用'cap production deploy'纔會出現問題。如果嘗試'帽子生產pm2:重新啓動'一切都好。 –