一千萬個為什麽

搜索

在Chef和系統Ruby之間共享寶石



我知道關於 chef_gem 資源的obv,但為了系統衛生的好處,我希望盡可能避免重復,所以我想在Chef中嵌入的Ruby和全系統的一個。此外,我已經意識到一個令人不安的情況:我在系統中使用的寶石Ruby來自已知良好的本地Yum回購,並通過LAN通過RPM進行安裝,而 chef_gem 進入公共互聯網,以及 Python社區中的最近事件讓我非常關註對這個。我試著在 ruby​​_block 之前和之內在我的配方中設置 ENV ['GEM_PATH'] ,但這似乎沒有效果,我在 require </代碼>。我錯過了什麽?

轉載註明原文: 在Chef和系統Ruby之間共享寶石

一共有 1 個回答:

逐一說明你的觀點:

但為了保持良好的系統衛生,我希望盡可能地避免重復。

你能否確保你的系統紅寶石將以與廚師紅寶石相同的速度進化? Chef 10通過簡單的gem命令安裝,並且通常是在應用程序需要的ruby和廚師需要的ruby之間切換的問題,同樣適用於gem依賴關系。我會建議不要混合系統和廚師紅寶石。

系統中的寶石Ruby來自已知的當地Yum倉庫,通過LAN通過RPM安裝,而chef_gem則通往公共互聯網

雖然我理解並同意最近的pipy事件,但這裏有兩件事:

  • 您的系統ruby會從yum存儲庫安裝gem,因為您的系統ruby的 gem 命令已經過調整,這是特定於您的發行版的。 -
  • Chef的ruby使用通常的ruby方法去rubygems.org,因為rbenv安裝的任何ruby或者yum install以外的任何其他方式都可以。

如果你真的想使用本地回購,你必須設置寶石服務器(或者,一些神器存儲庫也可以處理它),並使用廚師的/opt/chef/embedded/bin 中的”rel =“nofollow noreferrer”> gem sources

如果您使用的是大於13.0的廚師客戶端,則可以使用client.rb中的 ruby​​gems_url 來調整:

<�預> <�代碼> ruby​​gems_url </代碼>      

發送rubygems的位置。它可以設置為一個字符串或數組   將URI設置為rubygems源的字符串。這允許個人   為“氣隙”環境設置紅寶石內部鏡像。   默認值: https://www.rubygems.org
  廚師客戶端13.0更改

最後:

我曾嘗試在我的食譜中設置ENV ['GEM_PATH']   在ruby_block裏面,但這似乎沒有效果,我得到了一個   不符合要求

大廚總括包硬編碼的一些值,以避免幹擾系統紅寶石,我認為GEM_PATH環境變量在配方代碼中搜索gem you require 時被忽略。我不認為有這樣的解決方法,並且在中期你會遇到兼容性問題,因為你會在主廚的ruby和系統紅寶石之間產生偏差。