Похоже, Chef работает как бродячий пользователь, но не выполняет поиск по тому же пути, что и ваша оболочка. Войдите в систему с помощью vagrant ssh
и запустите , а затем npm
. Он вернет что-то вроде / путь / к / bin / npm
. Замените / path / to / bin /
ниже, чтобы Chef начал поиск в соответствующем каталоге.
execute "install q and zombiejs" do
cwd "/home/vagrant"
user "vagrant"
action :run
path ["/path/to/bin/"]
command "npm install -g q zombie should mocha coffee-script"
end
Чтобы выполнить сценарий или команду от имени пользователя, необходимо объединить su -l и bash -i :
execute "npm_install" do
command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -g q zombie should mocha coffee-script'"
action :run
end
Из-за некоторые ошибки , Chef неправильно устанавливает среду для указанного пользователя в execute . Решение narced133 не сработает.
Вы можете использовать среду
, чтобы установить переменные среды HOME и USER в блоке выполнения.
execute "install q and zombiejs" do
cwd "/home/vagrant"
user "vagrant"
action :run
environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})
command "npm install -g q zombie should mocha coffee-script"
end
Я часто использую это для установки бродячих плагинов в качестве бродячего пользователя внутри моего ВМ. Вы также можете установить другие переменные среды, если это необходимо для любой команды, которую вы пытаетесь выполнить.