ruby - Chef + rbenv : "rbenv: no such command ' install'"despite ruby-build being installed

标签 ruby bash chef-infra rbenv

我正在学习 Chef 并构建一本 Recipe ,其中包含安装 rbenvruby-build 的方法。 ruby-build 配方安装程序,然后尝试使用 rbenv 安装 Ruby 2.3.1。但是,每次我运行 chef-client 收敛时,最后一步都会失败并出现错误 rbenv: no such command 'install' even though 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

知道为什么这会在收敛过程中失败但在命令行中不会失败吗?

最佳答案

尝试在 shell 环境中设置 $HOME:

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

关于ruby - Chef + rbenv : "rbenv: no such command ' install'"despite ruby-build being installed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37750715/

相关文章:

ruby - 如何签署JWT?

ruby 如果散列键包含文本,则返回散列键

css - 如何在 nokogiri css 选择器中使用 ruby​​ 表达式插值 "#{var}"?

windows - 将shell函数移植到cmd.exe : Is it possible to automatically source scripts on startup?

linux - 并排比较并显示两个文件

linux - Debian Wheezy 上的 GitLab 安装失败要求 initctl

chef-infra - 'converge_by'是什么意思

Ruby 字符串剥离定义的字符

c - 将 cmp 与进程替换 (stdout) 一起使用? ( bash )

chef-infra - 覆盖 Chef bash 返回代码