【问题标题】:Chef + rbenv: "rbenv: no such command 'install'" despite ruby-build being installedChef + rbenv: "rbenv: no such command 'install'" 尽管安装了 ruby​​-build
【发布时间】:2016-10-11 13:37:34
【问题描述】:

我正在学习 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

任何想法为什么这会在收敛期间失败但在命令行中不会失败??

【问题讨论】:

标签: ruby bash chef-infra rbenv


【解决方案1】:

尝试在shell环境中设置$HOME

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

【讨论】:

  • 这似乎已经解决了!你有机会解释发生了什么吗?当我以用户david 手动登录服务器时,似乎$HOME 已设置
  • 是的,这是 Chef(实际上是 Mixlib ShellOut)如何以不同用户身份运行子命令的副作用。通常$HOME 在您通过 SSH 或 TTY 连接时由您的登录 shell 设置,但是当 Chef 运行命令时它不会这样做。我们一直在争论只是让 Chef 总是设置这个变量,但现在它没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多