2016-06-10 1 views
1

J'apprends le Chef et je construis un livre de cuisine avec des recettes pour l'installation rbenv et ruby-build. La recette ruby-build installe le programme, puis tente d'installer Ruby 2.3.1 avec rbenv. Cependant, chaque fois que je cours chef-client pour converger, cette dernière étape échoue avec l'erreur rbenv: no such command 'install'même si l'installation de ruby-build se termine avec succès.Chef + rbenv: "rbenv: aucune commande de ce type 'install'" malgré l'installation de ruby-build

bash "initialize rbenv and install ruby 2.3.1" do 
    user "david" 
    cwd node["user"]["home"] 
    environment({ 
    "PATH" => "#{node['rbenv']['bin']}:#{node['rbenv']['root']}/shims:#{ENV['PATH']}" 
    }) 

    # code "eval \"$(rbenv init -)\" && rbenv install 2.3.1" 
    code <<-EOF 
    eval "$(rbenv init -)" 
    rbenv install 2.3.1 
    EOF 
end 

J'ai commenté la façon d'une ligne que j'ai aussi essayé. Dans les deux cas, il est indiqué que install est manquant bien que le programme soit présent.

En fait, je peux entrer dans la machine manuellement et exécuter ces commandes très bien:

[[email protected] ~]# su david 
[[email protected] root]$ cd 
[[email protected] ~]$ eval "$(.rbenv/bin/rbenv init -)" 
[[email protected] ~]$ .rbenv/bin/rbenv install 2.3.1 
Downloading ruby-2.3.1.tar.bz2... 
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2 

Toutes les idées pourquoi ce serait un échec au cours de la convergence, mais pas à la ligne de commande ??

+0

pourrait-il avoir quelque chose à voir avec elle: http://stackoverflow.com/a/24249090/823617 – Casper

+0

Je ne pense pas parce que je suis ne pas utiliser un rbenv global – sixty4bit

Répondre

1

Essayez de régler $HOME dans un environnement shell:

environment({ 
    "PATH" => "#{node['rbenv']['bin']}:#{node['rbenv']['root']}/shims:#{ENV['PATH']}", 
    "HOME" => node["user"]["home"], 
    }) 
+0

qui semble l'avoir réparé! une chance de pouvoir expliquer ce qui se passe? quand je me connecte manuellement au serveur en tant qu'utilisateur 'david' il semble que' $ HOME' est déjà réglé – sixty4bit

+0

Oui, c'est un effet secondaire de la façon dont Chef (vraiment Mixlib ShellOut) exécute une sous-commande en tant qu'utilisateur différent. Normalement '$ HOME' est défini par votre shell de connexion lorsque vous vous connectez via SSH ou un TTY, mais lorsque Chef exécute une commande, il ne le fait pas. Nous discutons juste que Chef a toujours défini cette variable mais pour l'instant ce n'est pas le cas. – coderanger