【问题标题】:How to resolve a mixlib-shellout gem version conflict?如何解决 mixlib-shellout gem 版本冲突?
【发布时间】:2016-05-16 16:56:03
【问题描述】:

我正在尝试使用 Kitchen/Chef 进行部署。我实际上不确定我是否已经接触过厨房。

我的理解是gem list列出了存储库中的所有gem,一个项目从这个存储库中获取它想要的任何gem。

在我运行 gem install bundlergem install berkshelf 之后,我有一个由 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。

我的宝石文件

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

【问题讨论】:

  • 您的 Gemfile 和 Gemfile.lock 文件是什么样的?请将这些附加到您的问题中,并适当地格式化它们以提高可读性。
  • 你没有使用ChefDK,不是吗?它应该可以帮助您避免遇到此类问题。
  • 我如何知道我是否在使用 ChefSDK?你是说刀命命令吗?我运行的唯一命令是“bundle install”、“berks install”和与厨房相关的命令。这是否意味着我没有使用 ChefSDK?

标签: ruby rubygems chef-infra berkshelf test-kitchen


【解决方案1】:

您不想将 chef-11.18.12 与 test-kitchen 和 berkshelf 捆绑在一起。您不需要将 chef 与这些工具捆绑在一起,而且您在尝试将 chef-11 与它们捆绑在一起时肯定会遇到问题。

创建包含所有 cli 工具的 Gemfile 的问题在于,这些工具永远不会同时激活整个 gem 集。所以 test-kitchen 不依赖于 chef,berkshelf 最近才开始将 chef-config 作为库引入。当您尝试创建一个包时,您是在声明每个 gem 必须能够与其他所有 gem 加载到相同的 ruby​​ 进程中。即使对于最新的 cli 工具集,这也是经常会出错的东西。如果您添加 chef-11.18.12,那么您将选择从去年 4 月(大约 9 个月前)开始具有一组冻结的 gem 要求的 gem,并且很有可能最新的 test-kitchen 和 berkshelf 版本会加入与该版本的厨师不兼容的 mixlib-shellout 版本。情况变得更糟,因为我们对 mixlib-shellout 进行了重大更改,并且 chef-11 永远固定在没有更新的 mixlib-shellout 的旧分支上,而 test-kitchen 和 berkshelf 则继续前进。

这就是 ChefDK 存在的原因,它提供了一套一致的命令行工具,表面上看起来像一个包,但它不是一个包。如果 test-kitchen 或 berkshelf 没有同时将 chef 加载到内存中,那么可以包含这些 gem 的不同版本,这些 gem 在使用 mixlib-shellout 时可能会“冲突”,但会加载到不同的 ruby​​ 进程中。由于他们从不尝试加载到同一个 ruby​​ 进程中,因此 mixlib-shellout 上的“冲突”永远不会成为真正的冲突。

此外,我们确实会注意确保它们都正确加载在一起,并且我们不会在 ChefDK 中使用多个版本的 mixlib-shellout,但有时这很难避免。

您可能尝试将所有内容捆绑在一起,因为您想要拥有最新的工具链,但又想使用 chef-11,因为您的产品是 chef-11。但问题是,当您使用 berkshelf 或 test-kitchen 时,不需要在您正在启动的 ruby​​ 进程中使用 chef-11。当 TK 启动时,它应该启动一个 virt,然后在该 virt 上安装 chef 并启动它——您应该确保 virt 具有 chef-11 以便您可以测试您的说明书,而不是您的 TK 进程与捆绑厨师-11。无论捆绑什么 Chef gem TK 都与它的运作方式完全无关。

如果您尝试使用 test-kitchen 测试 chef-11,正确的方法是在您的 kitchen.yml 文件中将 require_chef_omnibus 配置参数设置为“11.18.12”。这将导致 chef-11 安装在您尝试配置的 virt 上。

+1 建议从安装 ChefDK 开始,而不是尝试捆绑您自己的工具集。

甚至建议在您的工作站上使用 chef-12 Knife 和 ChefDK 来管理 chef-11 virts/hosts。有一个陷阱,chefspec 确实在您的工作站上运行,并且当您的生产是 chef-11 时针对 chef-12 测试 chefspec 可能会导致某些类型的故障未被检测到。您可以将 chefspec 与 chef-11 捆绑在一起并以这种方式进行测试——但是,最好坚持使用 test-kitchen 进行完全集成测试以发现这些问题,然后将 chefspec 用作快速火焰测试(或不使用它在全部——单元测试和模拟你的资源集合在概念上是相当高级的主题)。在您真正使用 chefspec 之前,最好不要担心工作站上的 chef 版本,只需使用最新的 chef 版本的刀。

【讨论】:

  • 你的意思是在我的Gemfile中,我要去掉所有chef相关的行,并设置require_chef_omnibus=11.18.12,就可以了?
  • 你的回答确实有效!但我认为我太新了,无法理解你的答案。为什么说“你不想将 chef-11.18.12 与 test-kitchen 和 berkshelf 捆绑在一起”。这背后的原因是什么?
  • 我更新了这篇文章,更多地喋喋不休,希望我在某个地方有一个答案......
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多