【问题标题】:"cannot load such file -- chef/rest" when "require 'chef/rest'"当“需要‘厨师/休息’”时,“无法加载此类文件——厨师/休息”
【发布时间】:2019-09-19 16:40:58
【问题描述】:

尝试编写第一个程序以通过 API 访问厨师服务器。在https://docs.chef.io/api_chef_server.html#examples 上的示例程序之后,应该有两行代码来包含chef::rest 库。

require 'chef'
require 'chef/rest'

但代码因错误而失败

Traceback (most recent call last):
        2: from ./rest.rb:4:in `<main>'
        1: from /opt/chef/embedded/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/opt/chef/embedded/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- chef/rest (LoadError)

大厨客户端版本:14.12.9-1 操作系统版本:Ubuntu 16.04 LTS

是否缺少任何步骤?

【问题讨论】:

    标签: ruby rest chef-infra


    【解决方案1】:

    您没有分享您是使用厨师库作为食谱的一部分还是作为依赖厨师库的其他程序的一部分。

    如果您处于第二种情况,即在食谱上下文之外,请确保您使用 Gemfile 来管理您的厨师库需求,然后使用捆绑器执行您的程序。

    如你所见,Chef::Rest is deprecated

    Chef::REST 类将被删除。 Chef::REST 在 12.7.2 中已弃用,并将在 Chef 13 中删除。

    如果编写旨在在 Chef 内部运行的代码,例如在食谱或刀插件中,请转换为使用 Chef::ServerAPI。在大多数情况下,这就像创建 Chef::ServerAPI 实例而不是 Chef::REST 实例一样简单。

    如果编写代码以通过其他代码与 Chef 服务器交互,请移至 chef-api gem。

    所以我假设您使用的是旧版 Chef,因此对于补救措施,我将使用 Chef 12.6 版:

    $ cat Gemfile
    # frozen_string_literal: true
    
    source "https://rubygems.org"
    
    gem 'chef', '12.6.0'
    
    $ cat foo.rb
    require 'chef'
    require 'chef/rest'
    
    $ bundle install
    ...
    Bundle complete! 1 Gemfile dependency, 46 gems now installed.
    
    $ bundle exec ruby foo.rb
    

    【讨论】:

    • 如何使用 Gemfile 管理厨师库需求?从未找到任何关于此的说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多