[英]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.