作为stream浪的使用者,而不是根,与厨师独奏?

我正在尝试运行以下主厨命令:

# install zombiejs, q (promises), should, coffee-script & mocha execute "install q and zombiejs" do cwd "/home/vagrant" user "vagrant" action :run command "npm install -gq zombie should mocha coffee-script" end 

但它一直失败,因为它找不到npm

执行[安装q和zombiejs](chef-redtail ::默认第205行)有一个错误:Errno :: ENOENT:没有这样的文件或目录 – npm安装-gq僵尸应该摩卡coffee-script

通过vagrant sshlogin到vagrant并手动运行命令可以很好地工作。 以root身份login,通过sudo -i运行命令失败的原因是厨师配方失败(npm只安装在stream浪用户的本地,而不是root用户,这是我想要的)。

所以…我怎么能指定这个厨师execute块作为stream浪用户而不是根运行?


更新 :我认为这总结了我的问题:

 (ssh) /vagrant git:backbone ❯ whoami vagrant (ssh) /vagrant git:backbone ❯ which npm /home/vagrant/.local/bin/npm (ssh) /vagrant git:backbone ❯ echo $PATH /home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games (ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH /home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games (ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm npm not found 

通过http://tickets.opscode.com/browse/CHEF-2517


另一个更新 :所以我只注意到这个差异:

 (ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH /home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games (ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export HOME=/home/vagrant LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 LOGNAME=vagrant MAIL=/var/mail/vagrant PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games SHELL=/bin/zsh SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146 SUDO_COMMAND='/bin/zsh -c export' SUDO_GID=1001 SUDO_UID=1000 SUDO_USER=vagrant TERM=xterm USER=vagrant 

注意PATH的区别? 导出没有/home/vagrant/.local/bin目录中列出…为什么会第一个回声返回PATH与第二个出口返回没有它的PATH ? 这是问题吗?

要以用户身份执行脚本或命令,您需要组合su -lbash -i

  execute "npm_install" do command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -gq zombie should mocha coffee-script'" action :run end 

由于一些错误 ,厨师没有正确设置指定用户执行的环境。 134的解决scheme将无法正常工作。

您可以使用environment在您的执行块中设置HOME和USER环境variables。

 execute "install q and zombiejs" do cwd "/home/vagrant" user "vagrant" action :run environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'}) command "npm install -gq zombie should mocha coffee-script" end 

我经常使用这个来安装vagrant插件作为我的虚拟机内的stream浪用户。 你也可以设置其他环境variables,如果需要的话,你试图执行的任何命令。

这听起来像厨师正在执行作为stream浪的用户,但不是search相同的path作为你的壳。 使用vagrant ssh并运行which npm 。 它会返回类似/path/to/bin/npm 。 replace/path/to/bin/ below强制Chefsearch相应的目录。

 execute "install q and zombiejs" do cwd "/home/vagrant" user "vagrant" action :run path ["/path/to/bin/"] command "npm install -gq zombie should mocha coffee-script" end