Jor*_*ane 9 ssh shell node.js npm nvm
在持续部署上下文中,我执行了一个shell脚本来更新在远程服务器中重启我的应用程序
脚本是:
ssh user@myserver <<'ENDSSH'
cd /opt/myapp
git pull
npm i
forever stop src
npm run staging
ENDSSH
Run Code Online (Sandbox Code Playgroud)
输出是:
stdin: is not a tty
Already up-to-date.
-bash: line 3: npm: command not found
-bash: line 4: forever: command not found
-bash: line 5: npm: command not found
Run Code Online (Sandbox Code Playgroud)
注意:
如果我ssh到远程服务器并手动输入这些命令,一切都会工作
节点和故宫都安装了NVM上的远程服务器
which npm
给予/root/.nvm/versions/node/v6.10.0/bin/npm
不要按照 @rsp 的建议进行操作,而不是硬编码版本,您应该像这样获取 NVM 脚本:
. /root/.nvm/nvm.sh
Run Code Online (Sandbox Code Playgroud)
如果您设置默认版本,NVM 应该为您解析版本,这样您就不会因为更新到较新的 NodeJS 版本而返回到该脚本。
我在詹金斯面临同样的问题。
以下几行位于 .bashrc 文件的底部,我只是放在 .bashrc 文件的顶部
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Run Code Online (Sandbox Code Playgroud)
如果您的node
和npm
已安装,/root/.nvm/versions/node/v6.10.0/bin
则将其添加到脚本应该可以解决问题:
PATH="/root/.nvm/versions/node/v6.10.0/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
另外,您可以尝试使用绝对路径,例如:
/root/.nvm/versions/node/v6.10.0/bin/npm install
Run Code Online (Sandbox Code Playgroud)
等,但注意到,如果你有二进制包,而不是从源代码安装的节点,然后在你的家当线npm
二进制将可能是#!/usr/bin/env node
其将无法正常工作时,节点的路径中正确的版本-看到这个答案的详细信息:
从源代码安装Node时,npm
它将具有正确的shebang行,并带有指向node
二进制文件的绝对路径,并且可以在node
不在PATH中的情况下使用。
归档时间: |
|
查看次数: |
8836 次 |
最近记录: |