繁体   English   中英

flightplan脚本尝试在远程计算机上运行“npm install”时失败

[英]flightplan script failing when it tries to run “npm install” on remote machine

我的flightplan脚本看起来像:

// run commands on remote hosts (destinations)
plan.remote(function(remote) {
  remote.log('Copy to remote host in folder: ' + tmpDir);
  remote.sudo('cp -R /tmp/' + tmpDir + ' ~', {user: username});

  remote.log('Delete temporary local directory');
  remote.rm('-rf /tmp/' + tmpDir);
  remote.log('Install dependencies');
  remote.exec('cd ' + tmpDir);
  remote.sudo('npm --production install', {user: username});
  remote.log('Reload application');
  remote.sudo('ln -snf ~/' + tmpDir + ' ~/' + appName, {user: username});

});

脚本运行正常,直到遇到“npm --production install”行。

这是日志:

Copy to remote host in folder: node-app-1452386549897
104.131.12.146 $ sudo -u deploy -i bash -c 'cp -R /tmp/node-app-1452386549897 ~'
104.131.12.146 ● ok
104.131.12.146 Delete temporary local directory
104.131.12.146 $ rm -rf /tmp/node-app-1452386549897
104.131.12.146 ● ok
104.131.12.146 Install dependencies
104.131.12.146 $ cd node-app-1452386549897
104.131.12.146 ● ok
104.131.12.146 $ npm --production install
104.131.12.146 > bash: npm: command not found
failed(127)

虽然它说没有找到npm命令..该命令在远程机器上非常存在

知道是什么导致了这个问题吗?

这是部署用户的远程机器上的路径(具有sudo功能)

/home/deploy/.nvm/v4.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

这是root用户的远程机器上的路径:

/root/.nvm/v4.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

这是npm的路径:

/home/deploy/.nvm/v4.2.2/bin/npm
/root/.nvm/v4.2.2/bin/npm

我为root和deploy分别安装了它

刚刚在问题中找到了解决方案: 处于意外状态的远程上下文

默认情况下,在非交互状态下执行shell时,不会加载nvm

解决这个问题:

打开你的/root/.bashrc文件并在[ -z "$PS1" ] && return表达式之前移动与nvm相关的行。

最后你会得到这样的东西:

export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -z "$PS1" ] && return

我有同样的问题。 我找到的解决方案在这里解释: https//dhampik.com/blog/nodejs-deploy-nvm

我打开了deploy用户的/home/deploy/.bashrc文件,并在安装nvm后移动了位于文件末尾的行:

export NVM_DIR="/home/deploy/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

线条之上:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM