【问题标题】:Could not find 'berkshelf' (>= 0) among 90 total gem(s) (Gem::LoadError)在总共 90 个 gem 中找不到 'berkshelf' (>= 0) (Gem::LoadError)
【发布时间】:2015-03-02 13:10:48
【问题描述】:

我在为我的 rails 应用程序设置 Chef 和 Vagrant 时遇到问题。当我尝试时:

$ vagrant up

我得到错误:

Bringing machine 'default' up with 'virtualbox' provider...
The following berks command failed to execute:

    /Users/user/.chefdk/gem/ruby/2.1.0/bin/berks --version --format json

The stdout and stderr are shown below:

stdout: 
stderr: /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:313:in `to_specs':                        
    Could not find 'berkshelf' (>= 0) among 90 total gem(s) (Gem::LoadError)
    Checked in 'GEM_PATH=/Users/user/.vagrant.d/gems:/Applications/Vagrant/bin/../embedded/gems', execute `gem env` for more information
    from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:322:in `to_spec'
    from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:58:in`gem'
    from /Users/user/.chefdk/gem/ruby/2.1.0/bin/berks:22:in `<main>'

然后当我运行gem env 时,我得到:

RubyGems Environment:
- RUBYGEMS VERSION: 2.2.0
- RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin14.0]
- INSTALLATION DIRECTORY: /Users/user/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
- RUBY EXECUTABLE: /Users/user/.rbenv/versions/2.1.0/bin/ruby
- EXECUTABLE DIRECTORY: /Users/user/.rbenv/versions/2.1.0/bin
- SPEC CACHE DIRECTORY: /Users/user/.gem/specs
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-14
- GEM PATHS:
  - /Users/user/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
  - /Users/user/.gem/ruby/2.1.0
- GEM CONFIGURATION:
  - :update_sources => true
  - :verbose => true
  - :backtrace => false
  - :bulk_threshold => 1000
  - "gem" => "--no-document"
- REMOTE SOURCES:
  - https://rubygems.org/
- SHELL PATH:
  - /Users/user/.rbenv/versions/2.1.0/bin
  - /usr/local/Cellar/rbenv/0.4.0/libexec
  - /Users/user/.chefdk/gem/ruby/2.1.0/bin
  - /opt/chefdk/bin
  - /Users/user/.rbenv/shims
  - /Users/user/.chefdk/gem/ruby/2.1.0/bin
  - /opt/chefdk/bin
  - /opt/chef/embedded/bin
  - /usr/local/bin
  - /Library/Frameworks/Python.framework/Versions/3.4/bin
  - /Users/user/.rbenv/shims
  - /Users/user/.chefdk/gem/ruby/2.1.0/bin
  - /opt/chefdk/bin
  - /opt/chef/embedded/bin
  - /usr/local/bin
  - /Library/Frameworks/Python.framework/Versions/3.4/bin
  - /Users/user/.chefdk/gem/ruby/2.1.0/bin
  - /opt/chefdk/bin
  - /Users/user/.rbenv/shims
  - /opt/chef/embedded/bin
  - /usr/local/bin
  - /Library/Frameworks/Python.framework/Versions/3.4/bin
  - /Users/user/.rbenv/shims
  - /Users/user/.rbenv/bin
  - .git/safe/../../bin
  - /Users/user/.rbenv/shims
  - /Users/user/.bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/bin
  - /bin
  - /usr/sbin
  - /sbin
  - /opt/X11/bin
  - /Users/user/Documents/AppFiles/gsutil
  - /Applications/Postgres.app/Contents/Versions/9.3/bin
  - /Users/user/.rvm/bin
  - /usr/sbin
  - /Users/user/.rvm/bin
  - /Users/user/Documents/AppFiles/gsutil
  - /Applications/Postgres.app/Contents/Versions/9.3/bin
  - /Users/user/.rvm/bin
  - /usr/sbin
  - /Users/user/.rvm/bin
  - /Users/user/Documents/AppFiles/gsutil
  - /Applications/Postgres.app/Contents/Versions/9.3/bin
  - /Users/user/.rvm/bin
  - /usr/sbin
  - /Users/user/.rvm/bin

安装了 Berkshelf 以及 ChefDK。我还确保添加:

PATH=$HOME/.chefdk/gem/ruby/2.1.0/bin:/opt/chefdk/bin:$PATH 到我的 .bash_profile。

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails vagrant chef-infra rbenv


    【解决方案1】:

    vagrant-berkshelf 仅支持 Chef-DK 安装的 Berkshelf。

    您需要通过 gem 删除 Chef 和 Berkshelf 安装。

    gem uninstall chef chef-zero berkshelf knife-solo

    并从厨师网站https://downloads.getchef.com/chef-dk安装Chef-DK,新版本包含所有这些工具


    编辑

    如果您使用 Kitchen,您需要通过 gem 安装 Berkshelf 按照这篇文章了解如何做到这一点:https://stackoverflow.com/a/28221417/3271231

    【讨论】:

    • 在带有 Chef 0.3.6 的 Ubuntu 下对我来说效果很好
    【解决方案2】:

    还要检查C:\opscode\chefdk\bin 是否在您的路径中的embedded\bin 之前。您可以通过chef -v查看

    chef -v
    WARN: C:/opscode/chefdk/embedded/bin is before C:/opscode/chefdk/bin in your Path, please reverse that order.
    WARN: consider using the correct `chef shell-init <shell>` command to setup your environment correctly.
    Chef Development Kit Version: 0.4.0
    

    【讨论】:

      【解决方案3】:

      我从您发布的输出中看到您正在使用 RBENV,我认为这可能是导致您的问题的原因。

      ChefDK 带有自己的嵌入式 Ruby。 ChefDK 的所有 gem(chef-client、berkshelf 等)都与嵌入式 ruby​​ 一起存储,并且对系统 ruby​​ 或任何由 RBENV/RVM 管理的 ruby​​ 不可见。它们由使用嵌入式 ChefDK ruby​​ 的可执行文件加载。

      我也遇到过类似的问题,我尽可能避免将 RBENV/RVM 与 ChefDK 一起使用。

      如果您确实需要版本管理器来处理多个 ruby​​/rails 设置等其他内容,我已经成功确保 ChefDK 路径元素位于 RBENV 相关路径元素之前。

      要操作与 ChefDK 相关的 gem,请使用 chef gem 命令而不是普通的 gem 命令,以便将它们添加到嵌入式 ruby​​ 而不是系统 ruby​​。

      希望这可以帮助您解决问题。

      【讨论】:

        【解决方案4】:

        检查您的 vagrant-berkshelf 版本,较新的版本应该了解如何更好地使用 ChefDK 的 berks。也就是说,即使您仍然在后台使用 Vagrant,我也肯定会考虑切换到 Test Kitchen,它包含在 ChefDK 中并且可以更顺利地处理这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-18
          • 2011-12-13
          • 2021-09-19
          • 1970-01-01
          • 2011-09-10
          • 2013-09-22
          • 1970-01-01
          相关资源
          最近更新 更多