2016-11-30 19 views
1

我有一個紅帽企業Linux服務器版本6.7節點,我已經用CHEF引導。我已經在此節點上成功執行了多個食譜/食譜。現在我需要設置此節點來運行Ruby On Rails應用程序。RVM Ruby安裝在引導節點上突破Chef-Client

我有食譜菜譜,成功地::

  1. 安裝RVM
  2. 安裝紅寶石V2.2

的問題

後RVM安裝紅寶石,引導點頭的CHEF客戶端e不再有效。不管什麼食譜/食譜(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/[email protected]', 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-客戶突然忘記如何運行一次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 

回答

2

rvm覆蓋與自定義功能的cd內部功能,而導致錯誤。嘗試刪除rvm並使用其他紅寶石管理器,如rbenv

入住此博客張貼rvmrbenv之間的其他區別:http://jonathan-jackson.net/rvm-and-rbenv

我會說實話,我收到了同樣的問題(但不是廚師),讀多一點rvm並決定對我來說不是合適的工具。我相信肯定有一種方法可以讓rvm很好地發揮,但是我認爲這是不值得的。

+0

感謝您的建議@augusto 我最終卸載了RVM並使用了RBENV。 我現在可以安裝Ruby,而不會終止我的CHEF客戶端。 – Chiefwarpaint

0

這可能會在廚師客戶端12.17中修復。X讓廚師客戶端正確地爆發了RVM環境:

相關廚師錯誤:

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)。