RVM Ruby 在引导节点上安装中断 Chef-Client
RVM Ruby Install Breaks Chef-Client On Bootstrapped Node
我有一个使用 CHEF 引导的 Red Hat Enterprise Linux 服务器版本 6.7 节点。我已经在此节点上成功执行了多个 cookbooks/recipes。现在我需要将此节点设置为 运行 Ruby 在 Rails 应用程序上。
我有一本食谱,其中的食谱成功了 ::
- 安装 RVM
- 安装 Ruby v2.2
问题
RVM 安装后 Ruby,引导节点上的 CHEF-Client 不再工作。不管我尝试 运行 什么 Cookbook/Recipe(s),我都会得到以下输出 ::
PS C:\Users\JW031544\workspace\CHEF\chef-repo> knife ssh dh2vrtooldev01 "chef-client -o recipe[MY_COOKBOOK::default]" --manual-list --ssh-user MY_USER --ssh-password "MY_PASS"
dh2vrtooldev01 Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
dh2vrtooldev01 Ignoring gem-wrappers-1.2.7 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.2.7
dh2vrtooldev01 Ignoring nokogiri-1.6.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.6.8.1
dh2vrtooldev01 /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/dependency.rb:308:in `to_specs': Could not find 'addressable' (= 2.4.0) among 45 total gem(s) (Gem::MissingSpecError)
dh2vrtooldev01 Checked in 'GEM_PATH=/usr/local/rvm/gems/ruby-2.2.4:/usr/local/rvm/gems/ruby-2.2.4@global', execute `gem env` for more information
dh2vrtooldev01 from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/dependency.rb:320:in `to_spec'
dh2vrtooldev01 from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_gem.rb:65:in `gem'
dh2vrtooldev01 from /usr/bin/chef-client:4:in `<main>'
如果我进入节点并告诉 RVM 删除那个版本的 Ruby,那么 CHEF-Client 将再次开始正常工作。
问题
有人知道为什么 CHEF-Client 在 RVM 安装了 Ruby 版本后突然忘记如何 运行 吗?
源代码
(default.rb)
include_recipe 'abl_rails::rvm_install'
include_recipe 'abl_rails::ruby_install'
(rvm_install.rb)
# Install RVM (if it doesn't already exist)
execute 'install_rvm' do
cwd '/root/'
command 'curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -; curl -L get.rvm.io | bash -s stable'
not_if {::File.exists?('/etc/profile.d/rvm.sh')}
end
(ruby_install.rb)
# Install Ruby
bash 'install_ruby' do
cwd '/root/'
code <<-EOH
source /etc/profile.d/rvm.sh;
rvm install #{node['ruby_version']};
EOH
not_if "source /etc/profile.d/rvm.sh; ruby --version | grep #{node['ruby_version']}", :cwd => '/root'
notifies :run, "bash[set_default_rvm_ruby]", :immediately
end
# Set the default Ruby version in RVM
bash "set_default_rvm_ruby" do
cwd '/root'
code <<-EOH
source /etc/profile.d/rvm.sh;
rvm use #{node['ruby_version']} --default;
EOH
action :run
end
rvm
使用自定义函数覆盖 cd
内部函数,这就是导致错误的原因。尝试删除 rvm
并使用不同的 ruby 管理器,例如 rbenv
。
查看此博客 post 以了解 rvm
和 rbenv
之间的其他差异:http://jonathan-jackson.net/rvm-and-rbenv
老实说,我以前遇到过同样的问题(但不是与 chef 的问题),阅读了更多有关 rvm
的信息,并认为它不是适合我的工具。我敢肯定一定有办法让 rvm 玩得很好,但我认为这不值得付出努力。
这可能会在 chef-client 12 中修复。17.x 以便 chef-client 正确地脱离 RVM 环境:
相关 Chef 错误:
https://github.com/chef/appbundler/pull/24
https://github.com/chef/chef/issues/5589
如果它在 12.17.x 之后仍然损坏(当 ::Gem.clear_paths
存在于 /opt/chef/bin/chef-client appbundler binstub 中)那么应该针对 appbundler 删除一个新问题。
(不过,作为 RVM 用户,我不建议将其用于 运行 生产服务,但我发现在开发工作站类型的环境中使用它非常好——但是 YMMV)。
我有一个使用 CHEF 引导的 Red Hat Enterprise Linux 服务器版本 6.7 节点。我已经在此节点上成功执行了多个 cookbooks/recipes。现在我需要将此节点设置为 运行 Ruby 在 Rails 应用程序上。
我有一本食谱,其中的食谱成功了 ::
- 安装 RVM
- 安装 Ruby v2.2
问题
RVM 安装后 Ruby,引导节点上的 CHEF-Client 不再工作。不管我尝试 运行 什么 Cookbook/Recipe(s),我都会得到以下输出 ::
PS C:\Users\JW031544\workspace\CHEF\chef-repo> knife ssh dh2vrtooldev01 "chef-client -o recipe[MY_COOKBOOK::default]" --manual-list --ssh-user MY_USER --ssh-password "MY_PASS"
dh2vrtooldev01 Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
dh2vrtooldev01 Ignoring gem-wrappers-1.2.7 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.2.7
dh2vrtooldev01 Ignoring nokogiri-1.6.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.6.8.1
dh2vrtooldev01 /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/dependency.rb:308:in `to_specs': Could not find 'addressable' (= 2.4.0) among 45 total gem(s) (Gem::MissingSpecError)
dh2vrtooldev01 Checked in 'GEM_PATH=/usr/local/rvm/gems/ruby-2.2.4:/usr/local/rvm/gems/ruby-2.2.4@global', execute `gem env` for more information
dh2vrtooldev01 from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/dependency.rb:320:in `to_spec'
dh2vrtooldev01 from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_gem.rb:65:in `gem'
dh2vrtooldev01 from /usr/bin/chef-client:4:in `<main>'
如果我进入节点并告诉 RVM 删除那个版本的 Ruby,那么 CHEF-Client 将再次开始正常工作。
问题
有人知道为什么 CHEF-Client 在 RVM 安装了 Ruby 版本后突然忘记如何 运行 吗?
源代码
(default.rb)
include_recipe 'abl_rails::rvm_install'
include_recipe 'abl_rails::ruby_install'
(rvm_install.rb)
# Install RVM (if it doesn't already exist)
execute 'install_rvm' do
cwd '/root/'
command 'curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -; curl -L get.rvm.io | bash -s stable'
not_if {::File.exists?('/etc/profile.d/rvm.sh')}
end
(ruby_install.rb)
# Install Ruby
bash 'install_ruby' do
cwd '/root/'
code <<-EOH
source /etc/profile.d/rvm.sh;
rvm install #{node['ruby_version']};
EOH
not_if "source /etc/profile.d/rvm.sh; ruby --version | grep #{node['ruby_version']}", :cwd => '/root'
notifies :run, "bash[set_default_rvm_ruby]", :immediately
end
# Set the default Ruby version in RVM
bash "set_default_rvm_ruby" do
cwd '/root'
code <<-EOH
source /etc/profile.d/rvm.sh;
rvm use #{node['ruby_version']} --default;
EOH
action :run
end
rvm
使用自定义函数覆盖 cd
内部函数,这就是导致错误的原因。尝试删除 rvm
并使用不同的 ruby 管理器,例如 rbenv
。
查看此博客 post 以了解 rvm
和 rbenv
之间的其他差异:http://jonathan-jackson.net/rvm-and-rbenv
老实说,我以前遇到过同样的问题(但不是与 chef 的问题),阅读了更多有关 rvm
的信息,并认为它不是适合我的工具。我敢肯定一定有办法让 rvm 玩得很好,但我认为这不值得付出努力。
这可能会在 chef-client 12 中修复。17.x 以便 chef-client 正确地脱离 RVM 环境:
相关 Chef 错误:
https://github.com/chef/appbundler/pull/24
https://github.com/chef/chef/issues/5589
如果它在 12.17.x 之后仍然损坏(当 ::Gem.clear_paths
存在于 /opt/chef/bin/chef-client appbundler binstub 中)那么应该针对 appbundler 删除一个新问题。
(不过,作为 RVM 用户,我不建议将其用于 运行 生产服务,但我发现在开发工作站类型的环境中使用它非常好——但是 YMMV)。