飞行计划脚本尝试在远程计算机上运行“npm install”时失败
我的飞行计划脚本如下所示:
// 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命令没有find..该命令是非常多的远程机器上存在
任何想法可能会导致这个问题?
这是远程计算机上部署用户的path(具有sudofunction)
/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用户在远程机器上的path:
/root/.nvm/v4.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
这是npm的path:
/home/deploy/.nvm/v4.2.2/bin/npm /root/.nvm/v4.2.2/bin/npm
我为根和部署分别安装它
刚刚发现问题的解决scheme: 处于意外状态的远程上下文 。
在默认情况下以非交互式状态执行shell时,不加载nvm
。
要解决这个问题:
打开/root/.bashrc
文件,在[ -z "$PS1" ] && return
expression式之前移动与nvm
相关的行。
最后你会得到这样的东西:
export NVM_DIR="/root/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" [ -z "$PS1" ] && return
我有同样的问题。 我find的解决scheme在这里解释: 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