首页 > 解决方案 > 完整获取后 pm2 部署失败

问题描述

我想将一个简单的应用程序部署到我的 ec2 实例,但出现此错误:

bash: line 0: cd: /home/ubuntu/source: No such file or directory

  fetch failed

Deploy failed
1

我不明白为什么没有在我的虚拟机或本地机器上创建“源”目录。就像 pm2 自己创建的一样。有人可以解释它为什么存在以及如何成功部署它吗?

我的生态系统.config.js:

module.exports = {
    apps: [{
      name: 'puk',
      script: 'project/'
    }],
    deploy: {
      production: {
        user: 'ubuntu',
        host: 'ec2-35-180-119-129.eu-west-3.compute.amazonaws.com',
        key: '~/.ssh/id_rsa.pub',
        ref: 'origin/master',
        repo: 'git@github.com:nalnir/pukinn.git',
        path: '/home/ubuntu/',
        'post-deploy': 'npm install && pm2 startOrRestart ecosystem.config.js'
      }
    }
  }

pm2 deploy production 命令后的完整日志:

--> Deploying to production environment
--> on host ec2-35-180-119-129.eu-west-3.compute.amazonaws.com
  ○ deploying origin/master
  ○ executing pre-deploy-local
  ○ hook pre-deploy
  ○ fetching updates
  ○ full fetch
bash: line 0: cd: /home/ubuntu/source: No such file or directory

  fetch failed

Deploy failed
1

标签: amazon-ec2deploymentpm2

解决方案


我遇到了同样的问题并得到了这个帖子,但上面的答案/评论对我来说不是很有帮助。PM2 网站上也没有有用的文档。所以我从最初的所有步骤一一做:

  1. 在对任何现有文件夹setup调用命令之前先执行此操作。update因为PM2 创建了自己的文件夹结构:[Current, Source, Shared] (阅读这里)

pm2 部署生态系统.config.js 阶段设置

  1. 当您想部署新代码时,请使用以下命令:

pm2 部署生态系统.config.js 阶段更新--force

为什么--force
您的本地系统中可能有一些未推送到您的 git 存储库中的更改,并且由于部署脚本通过 git pull 获取更新,因此它们不会在您的服务器上。如果要在不推送任何数据的情况下进行部署,可以附加--force选项:

我在生态系统.config.js 文件中的部署对象:

deploy : {
    stage : {
      // Deploy New: pm2 deploy ecosystem.config.js stage setup
      // Update: pm2 deploy ecosystem.config.js stage update --force
      user : '_MY_SERVER_USER_NAME_', // remote server username
      host : '_MY_REMOTE_SERVER_IP_', // remote server ip
      ref  : 'origin/stage', // remote repo name
      repo : 'git@bitbucket.org:_MY_REPO_SSH_CLONE_URL_.git', // repo url
      path : '_REMOTE_DIRECTIVE_', // src root paths like /home/ubuntu/

      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --only MyAppName',
      'pre-setup': ''
    }
  }

我希望,它会对其他人有所帮助。


推荐阅读