2016-02-06 63 views
0

我想用廚房/廚師來部署。我其實不確定我是否已經觸及廚房。如何解決mixlib-shellout gem版本衝突?

我的理解是gem list列出了存儲庫中的所有寶石,並且一個項目從這個存儲庫中獲取它想要的任何寶石。我有一個gem list | grep shellout所示的mixlib-shellout(2.2.6)。

然後我運行了bundle install,並根據我的Gemfile安裝了「mixlib-shellout(1.6.1)」。然後我有gem list | grep shellout顯示的「mixlib-shellout(2.2.6,1.6.1)」。

從Gemfile.lock,我相信1.6.1是想要的版本。然後我跑berks install,拋出了一個異常,這是:

Unable to activate chef-11.18.12, because mixlib-shellout-2.2.6 conflicts with mixlib-shellout (~> 1.4) - 11.18.12 - (Gem::LoadError) 

我不明白爲什麼它試圖獲取2.2.6,而不是1.6.1。

我的Gemfile

source 'https://rubygems.org' 

group :development do 
    gem 'berkshelf', '~> 4.0' 
    gem 'berkshelf-api-client', '~> 2.0' 

    gem 'thor' 

    gem 'chef', '~> 11.16' 
    gem 'test-kitchen', '~> 1.2' 
    gem 'kitchen-vagrant', '>= 0.16' 
    gem 'serverspec' 
    gem 'infrataster' 
    gem 'busser' 
    gem 'busser-serverspec' 

    gem 'chefspec', '~>4' 

    gem 'rubocop' 
    gem 'foodcritic' 
end 

gem 'chef-vault', '~> 2.2' 

Gemfile.lock的

GEM 
    remote: https://rubygems.org/ 
    specs: 
    addressable (2.3.8) 
    ast (2.2.0) 
    berkshelf (4.1.0) 
     addressable (~> 2.3.4) 
     berkshelf-api-client (~> 2.0) 
     buff-config (~> 1.0) 
     buff-extensions (~> 1.0) 
     buff-shell_out (~> 0.1) 
     celluloid (= 0.16.0) 
     celluloid-io (~> 0.16.1) 
     cleanroom (~> 1.0) 
     faraday (~> 0.9.0) 
     httpclient (~> 2.6.0) 
     minitar (~> 0.5.4) 
     octokit (~> 4.0) 
     retryable (~> 2.0) 
     ridley (~> 4.3) 
     solve (~> 2.0) 
     thor (~> 0.19) 
    berkshelf-api-client (2.0.0) 
     faraday (~> 0.9.1) 
     httpclient (~> 2.6.0) 
    buff-config (1.0.1) 
     buff-extensions (~> 1.0) 
     varia_model (~> 0.4) 
    buff-extensions (1.0.0) 
    buff-ignore (1.1.1) 
    buff-ruby_engine (0.1.0) 
    buff-shell_out (0.2.0) 
     buff-ruby_engine (~> 0.1.0) 
    busser (0.7.1) 
     thor (<= 0.19.0) 
    busser-serverspec (0.5.9) 
     busser 
    capybara (2.6.2) 
     addressable 
     mime-types (>= 1.16) 
     nokogiri (>= 1.3.3) 
     rack (>= 1.0.0) 
     rack-test (>= 0.5.4) 
     xpath (~> 2.0) 
    celluloid (0.16.0) 
     timers (~> 4.0.0) 
    celluloid-io (0.16.2) 
     celluloid (>= 0.16.0) 
     nio4r (>= 1.1.0) 
    chef (11.18.12) 
     chef-zero (~> 2.2, >= 2.2.1) 
     diff-lcs (~> 1.2, >= 1.2.4) 
     erubis (~> 2.7) 
     ffi-yajl (~> 1.2) 
     highline (~> 1.6, >= 1.6.9) 
     mime-types (~> 1.16) 
     mixlib-authentication (~> 1.3) 
     mixlib-cli (~> 1.4) 
     mixlib-config (~> 2.0) 
     mixlib-log (~> 1.3) 
     mixlib-shellout (~> 1.4) 
     net-ssh (~> 2.6) 
     net-ssh-multi (~> 1.1) 
     ohai (~> 7.4) 
     plist (~> 3.1.0) 
     pry (~> 0.9) 
     rest-client (>= 1.0.4, <= 1.6.7) 
    chef-vault (2.7.1) 
    chef-zero (2.2.1) 
     ffi-yajl (~> 1.1) 
     hashie (~> 2.0) 
     mixlib-log (~> 1.3) 
     rack 
    chefspec (4.5.0) 
     chef (>= 11.14) 
     fauxhai (~> 3.0, >= 3.0.1) 
     rspec (~> 3.0) 
    cleanroom (1.0.0) 
    cliver (0.3.2) 
    coderay (1.1.0) 
    diff-lcs (1.2.5) 
    erubis (2.7.0) 
    faraday (0.9.2) 
     multipart-post (>= 1.2, < 3) 
    faraday_middleware (0.10.0) 
     faraday (>= 0.7.4, < 0.10) 
    fauxhai (3.1.0) 
     net-ssh 
    ffi (1.9.10) 
    ffi-yajl (1.4.0) 
     ffi (~> 1.5) 
     libyajl2 (~> 1.2) 
    foodcritic (6.0.0) 
     erubis 
     gherkin (~> 2.11) 
     nokogiri (>= 1.5, < 2.0) 
     rake 
     rufus-lru (~> 1.0) 
     treetop (~> 1.4) 
     yajl-ruby (~> 1.1) 
    gherkin (2.12.2) 
     multi_json (~> 1.3) 
    hashie (2.1.2) 
    highline (1.7.8) 
    hitimes (1.2.3) 
    httpclient (2.6.0.1) 
    infrataster (0.3.2) 
     capybara 
     faraday 
     faraday_middleware (>= 0.10.0) 
     net-ssh 
     net-ssh-gateway 
     poltergeist 
     rspec (>= 2.0, < 4.0) 
     thor 
    ipaddress (0.8.2) 
    json (1.8.3) 
    kitchen-vagrant (0.19.0) 
     test-kitchen (~> 1.4) 
    libyajl2 (1.2.0) 
    method_source (0.8.2) 
    mime-types (1.25.1) 
    mini_portile2 (2.0.0) 
    minitar (0.5.4) 
    mixlib-authentication (1.4.0) 
     mixlib-log 
     rspec-core (~> 3.2) 
     rspec-expectations (~> 3.2) 
     rspec-mocks (~> 3.2) 
    mixlib-cli (1.5.0) 
    mixlib-config (2.2.1) 
    mixlib-log (1.6.0) 
    mixlib-shellout (1.6.1) 
    molinillo (0.2.3) 
    multi_json (1.11.2) 
    multipart-post (2.0.0) 
    net-scp (1.2.1) 
     net-ssh (>= 2.6.5) 
    net-ssh (2.9.4) 
    net-ssh-gateway (1.2.0) 
     net-ssh (>= 2.6.5) 
    net-ssh-multi (1.2.1) 
     net-ssh (>= 2.6.5) 
     net-ssh-gateway (>= 1.2.0) 
    net-telnet (0.1.1) 
    nio4r (1.2.1) 
    nokogiri (1.6.7.2) 
     mini_portile2 (~> 2.0.0.rc2) 
    octokit (4.2.0) 
     sawyer (~> 0.6.0, >= 0.5.3) 
    ohai (7.4.1) 
     ffi (~> 1.9) 
     ffi-yajl (~> 1.1) 
     ipaddress 
     mime-types (~> 1.16) 
     mixlib-cli 
     mixlib-config (~> 2.0) 
     mixlib-log 
     mixlib-shellout (~> 1.2) 
     systemu (~> 2.6.4) 
     wmi-lite (~> 1.0) 
    parser (2.3.0.3) 
     ast (~> 2.2) 
    plist (3.1.0) 
    poltergeist (1.9.0) 
     capybara (~> 2.1) 
     cliver (~> 0.3.1) 
     multi_json (~> 1.0) 
     websocket-driver (>= 0.2.0) 
    polyglot (0.3.5) 
    powerpack (0.1.1) 
    pry (0.10.3) 
     coderay (~> 1.1.0) 
     method_source (~> 0.8.1) 
     slop (~> 3.4) 
    rack (1.6.4) 
    rack-test (0.6.3) 
     rack (>= 1.0) 
    rainbow (2.1.0) 
    rake (10.5.0) 
    rest-client (1.6.7) 
     mime-types (>= 1.16) 
    retryable (2.0.3) 
    ridley (4.4.1) 
     addressable 
     buff-config (~> 1.0) 
     buff-extensions (~> 1.0) 
     buff-ignore (~> 1.1) 
     buff-shell_out (~> 0.1) 
     celluloid (~> 0.16.0) 
     celluloid-io (~> 0.16.1) 
     erubis 
     faraday (~> 0.9.0) 
     hashie (>= 2.0.2, < 4.0.0) 
     httpclient (~> 2.6) 
     json (>= 1.7.7) 
     mixlib-authentication (>= 1.3.0) 
     retryable (~> 2.0) 
     semverse (~> 1.1) 
     varia_model (~> 0.4.0) 
    rspec (3.4.0) 
     rspec-core (~> 3.4.0) 
     rspec-expectations (~> 3.4.0) 
     rspec-mocks (~> 3.4.0) 
    rspec-core (3.4.2) 
     rspec-support (~> 3.4.0) 
    rspec-expectations (3.4.0) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.4.0) 
    rspec-its (1.2.0) 
     rspec-core (>= 3.0.0) 
     rspec-expectations (>= 3.0.0) 
    rspec-mocks (3.4.1) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.4.0) 
    rspec-support (3.4.1) 
    rubocop (0.37.0) 
     parser (>= 2.3.0.2, < 3.0) 
     powerpack (~> 0.1) 
     rainbow (>= 1.99.1, < 3.0) 
     ruby-progressbar (~> 1.7) 
     unicode-display_width (~> 0.3) 
    ruby-progressbar (1.7.5) 
    rufus-lru (1.0.5) 
    safe_yaml (1.0.4) 
    sawyer (0.6.0) 
     addressable (~> 2.3.5) 
     faraday (~> 0.8, < 0.10) 
    semverse (1.2.1) 
    serverspec (2.29.1) 
     multi_json 
     rspec (~> 3.0) 
     rspec-its 
     specinfra (~> 2.48) 
    sfl (2.2) 
    slop (3.6.0) 
    solve (2.0.2) 
     molinillo (~> 0.2.3) 
     semverse (~> 1.1) 
    specinfra (2.50.4) 
     net-scp 
     net-ssh (>= 2.7, < 3.1) 
     net-telnet 
     sfl 
    systemu (2.6.5) 
    test-kitchen (1.4.2) 
     mixlib-shellout (>= 1.2, < 3.0) 
     net-scp (~> 1.1) 
     net-ssh (~> 2.7, < 2.10) 
     safe_yaml (~> 1.0) 
     thor (~> 0.18) 
    thor (0.19.0) 
    timers (4.0.4) 
     hitimes 
    treetop (1.6.3) 
     polyglot (~> 0.3) 
    unicode-display_width (0.3.1) 
    varia_model (0.4.1) 
     buff-extensions (~> 1.0) 
     hashie (>= 2.0.2, < 4.0.0) 
    websocket-driver (0.6.3) 
     websocket-extensions (>= 0.1.0) 
    websocket-extensions (0.1.2) 
    wmi-lite (1.0.0) 
    xpath (2.0.0) 
     nokogiri (~> 1.3) 
    yajl-ruby (1.2.1) 

PLATFORMS 
    ruby 

DEPENDENCIES 
    berkshelf (~> 4.0) 
    berkshelf-api-client (~> 2.0) 
    busser 
    busser-serverspec 
    chef (~> 11.16) 
    chef-vault (~> 2.2) 
    chefspec (~> 4) 
    foodcritic 
    infrataster 
    kitchen-vagrant (>= 0.16) 
    rubocop 
    serverspec 
    test-kitchen (~> 1.2) 
    thor 

BUNDLED WITH 
    1.11.2 
+0

你的Gemfile和Gemfile.lock文件是什麼樣的?請將這些附加到您的問題中,併爲了可讀性對其進行適當格式化。 –

+0

您沒有使用[ChefDK](https://downloads.chef.io/chef-dk),是不是?它應該可以幫助你避免遇到這樣的問題。 – StephenKing

+0

我如何知道我是否使用ChefSDK?你的意思是刀命命令嗎?我運行的唯一命令是「捆綁安裝」,「berks安裝」和廚房相關。這是否意味着我沒有使用ChefSDK? – post2626

回答

2

你不想被捆綁廚師12年11月18日與測試廚房和berkshelf。您不需要將廚師捆綁在這些工具上,而且您肯定會遇到試圖將廚師-11捆綁在一起的問題。

使用所有cli工具在其中創建Gemfile的問題是,這些工具從不會一次激活整組寶石。所以測試廚房不依賴於廚師,而最近纔開始將chef-config作爲圖書館。當你嘗試創建一個包時,你會說每個gem都必須能夠與其他寶石一起加載到相同的ruby進程中。即使是最新的cli工具,這也是經常會被破壞的東西。如果你添加廚師-11.18.12,那麼你從去年四月份(大約9個月前)就選擇了一組具有凍結寶石要求的寶石,並且很有可能最新的測試廚房和berkshelf版本將拉入與該版本的廚師不兼容的mixlib-shellout版本。它變得更糟,因爲我們對mix​​lib-shellout進行了重大更改,並且chef-11永遠固定在mixlib-shellout的一箇舊分支上,而該分支沒有獲得更新,而測試廚房和berkshelf已經開始移動。

這就是爲什麼ChefDK存在的原因是它提供了一套統一的命令行工具,它看起來像一個捆綁包,但不是捆綁包。如果測試廚房或berkshelf不會同時將廚師加載到內存中,那麼包含不同版本的那些可能會在使用mixlib-shellout時會「衝突」的寶石,但會加載到不同的ruby過程中就好了。由於他們從未嘗試加載到相同的ruby進程中,所以mixlib-shellout上的「衝突」從未成爲真正的衝突。

此外,我們儘量小心謹慎地將它們全部正確加載在一起,並且我們沒有在ChefDK中結合多個版本的mixlib-shellout,但有時這很難避免。

你可能試圖做的是把所有東西捆綁在一起,因爲你想擁有最新的工具鏈,但是想要使用廚師-11,因爲你的廚師是廚師-11。但問題是,當你使用berkshelf或test-kitchen時,沒有必要在你正在啓動的ruby進程中使用chef-11。當傳統知識開始時,它應該啓動一個virt,然後將這個virt安裝廚師,並啓動它 - 你應該確保virt有廚師-11,這樣你就可以測試你的食譜,而不是你的TK過程被捆綁在一起廚師-11。不管廚師寶石TK與什麼捆綁在一起都與它的運作方式完全無關。

如果你想用test-kitchen測試chef-11,正確的方法是在你的kitchen.yml文件中將require_chef_omnibus配置參數設置爲「11.18.12」。這將導致chef-11被安裝在你試圖配置的virt上。

+1建議您只需安裝ChefDK,而不是試圖捆綁自己的工具集。

甚至建議您在工作站上使用chef-12刀和ChefDK來管理chef-11 virts/hosts。有一個問題,chefspec確實在你的工作站上運行,當你的產品是廚師-11時,chefs-12可能會讓某些類型的故障不被發現,從而測試chefspec。您可以將chefspec與chef-11捆綁在一起並進行這種測試 - 然而,最有可能更好地堅持使用測試廚房的全面集成測試來發現這些問題,並且只需使用chefspec作爲快速火焰測試(或者不用於所有的單元測試和嘲笑你的資源收集都是概念上相當先進的主題)。在您實際碰到和問題chefspec之前,最好不要擔心您的工作站上的廚師版本,只需使用最新的廚師版本的刀。

+0

你的意思是在我的Gemfile中,我想刪除所有廚師相關的行,並設置require_chef_omnibus = 11.18.12,那很好? – post2626

+0

你回答真的有用!但我認爲我太新,無法理解你的答案。你爲什麼說'你不想捆綁廚師-11.18.12與測試廚房和berkshelf'。這背後的原因是什麼? – post2626

+0

我更新了更多的信息,希望有一個答案你我在那裏的地方... – lamont