在总共 90 个 gem 中找不到 'berkshelf' (>= 0) (Gem::LoadError)
Could not find 'berkshelf' (>= 0) among 90 total gem(s) (Gem::LoadError)
我在为 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。
如有任何帮助,我们将不胜感激!
检查你的 vagrant-berkshelf 版本,较新的版本应该了解如何让它更好地使用 ChefDK 的 berks。也就是说,即使您仍在后台使用 Vagrant,我肯定会考虑切换到 Test Kitchen,它包含在 ChefDK 中并且可以更顺利地处理这个问题。
我从您发布的输出中看到您正在使用 RBENV,我认为这可能是导致您出现问题的原因。
ChefDK 自带嵌入式 Ruby。 ChefDK 的所有 gem(chef-client、berkshelf 等)都与嵌入式 ruby 一起存储,并且对系统 ruby 或 RBENV/RVM 管理的任何红宝石不可见。它们由使用嵌入式 ChefDK ruby.
的可执行文件加载
我遇到过与您类似的问题,因此我尽可能避免将 RBENV/RVM 与 ChefDK 一起使用。
如果您真的需要版本管理器来处理多个 ruby/rails 设置等其他内容,我通过确保 ChefDK 路径元素出现在 RBENV 相关路径元素之前取得了成功。
要操作 ChefDK 相关的 gem,请使用 chef gem
命令而不是普通的 gem
命令,这样它们就会被添加到嵌入式 ruby 而不是系统 ruby。
希望这可以帮助您解决问题。
vagrant-berkshelf 仅支持由 Chef-DK 安装的 Berkshelf。
您需要通过 gem 删除 Chef & Berkshelf 安装。
gem uninstall chef chef-zero berkshelf knife-solo
并从 Chef 网站安装 Chef-DK https://downloads.getchef.com/chef-dk,新版本包含所有这些工具
编辑
如果您使用 Kitchen,您需要在 gem 之前安装 Berkshelf
按照这个 post 了解如何做到这一点:
还要检查 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
我在为 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。
如有任何帮助,我们将不胜感激!
检查你的 vagrant-berkshelf 版本,较新的版本应该了解如何让它更好地使用 ChefDK 的 berks。也就是说,即使您仍在后台使用 Vagrant,我肯定会考虑切换到 Test Kitchen,它包含在 ChefDK 中并且可以更顺利地处理这个问题。
我从您发布的输出中看到您正在使用 RBENV,我认为这可能是导致您出现问题的原因。
ChefDK 自带嵌入式 Ruby。 ChefDK 的所有 gem(chef-client、berkshelf 等)都与嵌入式 ruby 一起存储,并且对系统 ruby 或 RBENV/RVM 管理的任何红宝石不可见。它们由使用嵌入式 ChefDK ruby.
的可执行文件加载我遇到过与您类似的问题,因此我尽可能避免将 RBENV/RVM 与 ChefDK 一起使用。
如果您真的需要版本管理器来处理多个 ruby/rails 设置等其他内容,我通过确保 ChefDK 路径元素出现在 RBENV 相关路径元素之前取得了成功。
要操作 ChefDK 相关的 gem,请使用 chef gem
命令而不是普通的 gem
命令,这样它们就会被添加到嵌入式 ruby 而不是系统 ruby。
希望这可以帮助您解决问题。
vagrant-berkshelf 仅支持由 Chef-DK 安装的 Berkshelf。
您需要通过 gem 删除 Chef & Berkshelf 安装。
gem uninstall chef chef-zero berkshelf knife-solo
并从 Chef 网站安装 Chef-DK https://downloads.getchef.com/chef-dk,新版本包含所有这些工具
编辑
如果您使用 Kitchen,您需要在 gem 之前安装 Berkshelf 按照这个 post 了解如何做到这一点:
还要检查 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