Saya mencoba menjalankan perintah koki berikut:
# install zombiejs, q (promises), should, coffee-script & mocha
execute "install q and zombiejs" do
cwd "/home/vagrant"
user "vagrant"
action :run
command "npm install -g q zombie should mocha coffee-script"
end
Tetapi terus gagal karena tidak dapat menemukan npm
:
mengeksekusi [install q dan zombiejs] (chef-redtail :: default line 205) memiliki kesalahan: Errno :: ENOENT: Tidak ada file atau direktori seperti itu - npm install -gq zombie harus mocha coffee-script
Masuk ke gelandangan melalui vagrant ssh
dan menjalankan perintah secara manual berfungsi dengan baik. Masuk sebagai root, melalui sudo -i
dan menjalankan perintah gagal karena alasan yang sama resep koki gagal (npm diinstal secara lokal hanya untuk pengguna gelandangan, bukan untuk root: ini yang saya inginkan).
Jadi ... bagaimana saya bisa menentukan execute
blok koki ini untuk dijalankan sebagai pengguna gelandangan dan bukan root?
UPDATE : Saya pikir ini meringkas masalah saya:
(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
via http://tickets.opscode.com/browse/CHEF-2517
PEMBARUAN LAIN : Jadi saya perhatikan perbedaan ini:
(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
Perhatikan perbedaannya PATH
? Ekspor tidak memiliki /home/vagrant/.local/bin
direktori yang terdaftar di dalamnya ... mengapa gema pertama kembali PATH
dengan itu dan ekspor kedua PATH
tanpa itu? Apakah ini masalahnya?
Sepertinya Chef mengeksekusi sebagai pengguna gelandangan tetapi tidak mencari PATH yang sama dengan shell Anda. Login menggunakan
vagrant ssh
dan menjalankanwhich npm
. Ini akan mengembalikan sesuatu seperti/path/to/bin/npm
. Ganti di/path/to/bin/
bawah ini untuk memaksa Chef untuk mencari direktori yang sesuai.sumber
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script