无法在90个Gem中找到'berkshelf'(>= 0)(Gem :: LoadError)

4

我在为我的Rails应用程序设置Chef和Vagrant时遇到了问题。当我尝试执行以下操作时:

$ vagrant up

I get the error:

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文件中。
非常感谢您的帮助!
4个回答

8

使用Chef 0.3.6在Ubuntu下对我来说工作得很好。 - Pierozi

3

还要检查C:\opscode\chefdk\bin是否在您的PATH之前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

2
我从您发布的输出中看到您正在使用RBENV,我认为这可能是导致您遇到问题的原因。
ChefDK附带了自己的嵌入式Ruby。所有ChefDK的gem(chef-client、berkshelf等)都存储在嵌入式Ruby中,并且对系统Ruby或由RBENV/RVM管理的任何Ruby不可见。它们通过使用嵌入式ChefDK Ruby的可执行文件加载。
我遇到了类似于您的问题,并尽可能避免在ChefDK中使用RBENV/RVM。
如果您确实需要版本管理器来处理多个ruby/rails设置之类的其他内容,我成功地通过确保ChefDK路径元素出现在与RBENV相关的路径元素之前来解决问题。
要操作与ChefDK相关的gems,请使用chef gem命令,而不是普通的gem命令,以便将它们添加到嵌入式Ruby而不是系统Ruby中。
希望这可以帮助您解决问题。

0

检查您的vagrant-berkshelf版本,更新的版本应该更好地使用来自ChefDK的berks。话虽如此,即使您在幕后仍然使用Vagrant,我肯定也会考虑转换到Test Kitchen,它已经包含在ChefDK中,并且可以更加顺畅地处理此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接