节点在 vagrant 上配置期间安装,但在连接到 ssh 时消失

节点在 vagrant 上配置期间安装,但在连接到 ssh 时消失

我真的受够了,我不知道哪里出了问题。我正在使用Vagrant 1.7.2Ubuntu 13.04虚拟盒 4.3 12 r93733

我的主机是Windows 8.1

这是我在 bootstrap.sh 上找到的节点引导脚本

echo "--- Installing Node.js ---"
curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | bash
source ~/.nvm/nvm.sh
nvm install 0.12
nvm use 0.12
sudo cp ~/.nvm/versions/nodejs/v0.12/bin/node /bin/node

echo "--- Install node app dependencies --"
cd /var/www/html/node
npm install express
npm install youtube-audio-stream

在配置过程中,我可以看到节点已正确安装。我可以看到现在使用节点 v0.12我还看到npm 安装是成功的

但是当我使用连接时流浪者ssh.我明白未找到命令“nvm”。 和程序‘node’可以在以下包中找到:我也检查了〜/ .nvm /目录,它不存在。

这变得更加奇怪了。因此,当我使用 ssh 时,我再次重新运行该脚本。然后 nvm 现已正确安装,我可以使用 node。

答案1

好吧,我找到了方法。而且非常简单(比我说的要简单得多)。

简而言之,请按照以下步骤操作:

  1. 将 Vagrantfile 设置为以普通用户身份运行:

    config.vm.provision "shell", path: "provision.sh", privileged: false
    
  2. 在您的配置文件中,执行以下操作:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash
    source $HOME/.nvm/nvm.sh
    

上述命令将首先从 github creationix 安装 nvm,并刷新 shell 以启用使用 nvm 命令安装 node 和 npm 的功能。

  1. 然后你只需这样做:

    nvm install stable
    nvm alias default stable
    

“stable” 始终是 node 的最新稳定版本。因此,如果您想要特定版本,只需将“stable”更改为所需的版本即可。

第二行,输入 nvm alias,只是告诉 nvm 它需要默认使用你传递给它的版本。然后 nvm 在运行 node 和 npm 命令时就知道要调用哪个版本的 node。

感谢 djheru 的澄清https://stackoverflow.com/a/26691455

答案2

如果我没记错的话,vagrant provisioning 是以 root 身份运行的。NVM 的安装特定于用户,它会将命令添加到当前用户的 bash 配置中(在本例中为 root)。如果没有这些命令,NPM 在 shell 中不可用。您必须以 vagrant 用户身份(而不是 root 用户)安装 NVM 和节点。

此外,您正在使用旧版本的 NVM。

sudo su vagrant -c 'curl https://raw.githubusercontent.com/creationix/nvm/v0.23.3/install.sh | bash'
sudo su vagrant -c '. ~vagrant/.nvm/nvm.sh;nvm install v0.12'
sudo su vagrant -c '. ~vagrant/.nvm/nvm.sh;nvm use v0.12'

答案3

这是我解决问题的方法。我还没有尝试过您的答案,所以我不能接受任何答案,但这对我有用。

git clone https://github.com/creationix/nvm.git /home/vagrant/.nvm && cd /home/vagrant/.nvm && git checkout `git describe --abbrev=0 --tags`
source /home/vagrant/.nvm/nvm.sh
nvm install 0.12
nvm use 0.12
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

答案4

首先我必须说我的答案不是一个完整的答案所以请仔细阅读。

你需要检查你的 Vagrantfile 是否以 root 身份运行。如果是,你需要更改为像普通用户一样使用:

config.vm.provision "shell", path: "provision.sh", privileged: false

他们privileged: false会为你做这个改变。

接下来,你需要在从 github 安装 nvm 的命令后刷新 shell:

curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash
source $HOME/.nvm/nvm.sh

source $HOME/.nvm/nvm.sh会帮你完成这些。你可以把这个命令附加到 vagrant 内部的 .bashrc 文件中$HOME/.bashrc

可悲的是,您需要导出一些 node 和 npm 的环境变量并将命令放入 .bashrc 中,这样当您通过 ssh 进入 vagrant 时,您将能够使用 node 和 npm 命令,但我还不知道正确的命令来做这件事,这就是我最终来到这里的原因呵呵呵...

哦,将命令添加到 .bashrc 后,您需要执行以下操作来刷新 shell:

source $HOME/.bashrc

好吧,现在我只需要找到如何在使用 nvm 安装节点时导出变量来完成这个任务呵呵......

相关内容