厨师和rbenv:尽管已安装ruby-build,但出现“rbenv: no such command 'install'”错误

3

我正在学习Chef,并构建一个食谱,其中包含安装rbenvruby-build的步骤。 ruby-build 步骤将安装程序,然后尝试使用rbenv安装Ruby 2.3.1。但是,每次运行chef-client进行合并时,这最后一步都会失败,并显示错误rbenv: no such command 'install',即使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

我已经注释掉了我尝试过的一行代码。但无论哪种情况,它都会说缺少install,尽管该程序实际上已经存在。

实际上,我可以手动进入机器并成功运行这些命令:

[root@myserver ~]# su david
[david@myserver root]$ cd
[david@myserver ~]$ eval "$(.rbenv/bin/rbenv init -)"
[david@myserver ~]$ .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

有什么想法,为什么在收敛过程中会失败,但在命令行中不会?

这与此有关吗:https://dev59.com/EGMm5IYBdhLWcg3wbunb#24249090 - Casper
我不这么认为,因为我没有使用全局的rbenv。 - sixty4bit
1个回答

1
尝试在shell环境中设置$HOME
environment({
    "PATH" => "#{node['rbenv']['bin']}:#{node['rbenv']['root']}/shims:#{ENV['PATH']}",
    "HOME" => node["user"]["home"],
  })

好像修复了!你能解释一下发生了什么吗?当我手动以用户“david”的身份登录服务器时,似乎$HOME已经设置好了。 - sixty4bit
是的,这是Chef(实际上是Mixlib ShellOut)以不同用户身份运行子命令的副作用。通常情况下,当您通过SSH或TTY连接时,$HOME由登录shell设置,但是当Chef运行命令时,它不会这样做。我们一直在讨论是否让Chef始终设置此变量,但目前还没有这样做。 - coderanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接