2016-02-06 35 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