【问题标题】:Running chef-client throws 404 "Object Not Found" (Net::HTTPServerException)运行 chef-client 抛出 404“找不到对象”(Net::HTTPServerException)
【发布时间】:2026-01-22 04:05:02
【问题描述】:

我刚开始与 Chef 合作,对 DevOps 领域还很陌生。
我安装了 Chef Server,它运行良好,然后我开始使用 Knife 并添加了两个客户端——我的 MacBook(OS X)和我自己不管理的 Ubuntu 10.04 服务器,所以我不得不请一个系统管理员将 chef-client 安装到这台机器上。我创建了一本测试食谱并将其添加到每个客户端的运行列表中。但是,当我尝试在它们两个上运行 chef-client 时,在我的 Mac OS X 机器上一切正常,而 Ubuntu 10.04 运行抛出错误:

$ sudo chef-client

[Wed, 17 Apr 2013 16:32:26 +0200] INFO: Starting Chef Run (Version 0.9.18)  
[Wed, 17 Apr 2013 16:32:27 +0200] ERROR: Running exception handlers  
[Wed, 17 Apr 2013 16:32:27 +0200] ERROR: Exception handlers complete  
/usr/lib/ruby/1.8/net/http.rb:2101:in `error!': 404 "Object Not Found" (Net::HTTPServerException)
from /usr/lib/ruby/1.8/chef/rest.rb:234:in `api_request'
from /usr/lib/ruby/1.8/chef/rest.rb:285:in `retriable_rest_request'
from /usr/lib/ruby/1.8/chef/rest.rb:215:in `api_request'
from /usr/lib/ruby/1.8/chef/rest.rb:226:in `api_request'
from /usr/lib/ruby/1.8/chef/rest.rb:335:in `follow_redirect'
from /usr/lib/ruby/1.8/chef/rest.rb:226:in `api_request'
from /usr/lib/ruby/1.8/chef/rest.rb:285:in `retriable_rest_request'
from /usr/lib/ruby/1.8/chef/rest.rb:215:in `api_request'
from /usr/lib/ruby/1.8/chef/rest.rb:111:in `get_rest'
from /usr/lib/ruby/1.8/chef/client.rb:252:in `sync_cookbooks'
from /usr/lib/ruby/1.8/chef/client.rb:165:in `run'
from /usr/lib/ruby/1.8/chef/application/client.rb:222:in `run_application'
from /usr/lib/ruby/1.8/chef/application/client.rb:212:in `loop'
from /usr/lib/ruby/1.8/chef/application/client.rb:212:in `run_application'
from /usr/lib/ruby/1.8/chef/application.rb:62:in `run'
from /usr/bin/chef-client:26

这个错误看起来很笼统,所以找出原因并没有太大帮助。

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    简短回答:确保您已安装最新版本的 Chef Client。


    长答案:

    为了获得更多详细信息,首先要做的是在 client.rb 文件中启用更好的日志记录。通常你可以通过在 /etc/chef/client.rb 中添加以下行来做到这一点:

    log_level :debug
    

    这已经向我展示了客户端试图访问的资源:

    [Wed, 17 Apr 2013 16:46:10 +0200] DEBUG: Sending HTTP Request via GET to  
        chef.xxxxxx.xxxxx.com:443/nodes/node-apache1.xxxxxx.com/cookbooks  
    [Wed, 17 Apr 2013 16:46:10 +0200] ERROR: Running exception handlers  
    [Wed, 17 Apr 2013 16:46:10 +0200] ERROR: Exception handlers complete  
    [Wed, 17 Apr 2013 16:46:10 +0200] DEBUG: Re-raising exception:   
    Net::HTTPServerException - 404 "Object Not Found"
    

    这是一个不存在的资源,因为系统管理员从 Opscode 的 Ubuntu 存储库安装了客户端,而这不是它的最后一个版本,它与 Chef Server 11 不兼容。我让他安装最新版客户端来自the Chef Client install page on Opscode.com

    如您所见,您可以下载所需的包或直接运行

    curl -L https://www.opscode.com/chef/install.sh | sudo bash
    

    最新版本。

    运行 chef-client 现在一切正常。

    【讨论】:

      【解决方案2】:

      PS:我不确定这是否对其他人有帮助,但我设法通过以下方式解决了同样的问题。

      如果你 ssh 进入盒子然后运行这个命令

      sudo chef-client --runlist "your_cookbook_name"

      它将提示确切的错误。所以你可以根据错误采取措施。

      在我的情况下,当我检查上述方法时,BDW。我发现我没有在https://manage.chef.io/ 中创建Environment

      【讨论】:

        最近更新 更多