厨师刀上传食谱:方法不允许

我在CentOS 6盒子上运行Chef服务器11。 从Opscode通过RPM安装。 我在Windows 7盒子上安装了我的工作站。 我可以运行通常的knife client list并获得响应,所以我相信我的服务器工作正常。

我在工作站上创build了一个本地Git仓库,添加了启动菜谱 ,并将其提交到本地仓库(在工作站上的本地磁盘上)。

但是,当我尝试上传食谱时,

 knife cookbook upload getting-started Uploading getting-started [0.4.0] ERROR: Method Not Allowed Response: 

“响应”是空的。 当我尝试一个knife cookbook list ,我找回空集。 我想这是因为它是从没有烹饪书的服务器获取的。

我在旧的Opscode维基上看到这个post ,这让我相信我正在编辑_default环境。 所以创build了一个开发环境,确认它存在,并且:

 knife cookbook upload getting-started -E Dev 

同样的结果。 我最后的手段是指定一个pipe理员帐户:

 knife cookbook upload getting-started -E Dev -u admin 

同样的结果。

为了成功上传这本食谱,我需要做什么?

我有一个默认安装相同的问题。 在服务器url中发现knife.rb需要https://而不是http://。

当我尝试从本地jsonfile upload一个厨师angular色,但在本地json中缺less属性时,我也收到了这个错误。 当我使用额外的详细模式,我看到刀正在尝试一个HTTP PUT操作,并收到HTTP 405 Method Not Allowed响应。

所以看起来“方法不允许”的错误基本上意味着刀提交了一个厨师服务器不明白的HTTP请求。

要解决我的问题与angular色,一旦我使用正确的angular色格式(如下所示),它工作正常。

 { "name": "my role name", "description": "my role description", "chef_type": "role", "json_class": "Chef::Role", "run_list": [ "recipe[recipe1]", "recipe[recipe2]" ], "default_attributes": {}, "override_attributes": {} } 

“方法不允许”错误实际上是一个HTTP 405错误。 我不知道。 事实certificate,我的厨师服务器上有一些奇怪的redirect。 我将通过它的FQDN来寻址服务器,但是被redirect到主机名。 我打开了“额外”的冗长:

 knife cookbook upload getting-started -V -V 

debugging消息让我知道,初始上传得到了一个HTTP 301(永久移动)。 当刀试图击中新的地址,它将使用一个GET,而不是一个POST,导致405.我configuration刀指向redirect的URL和上传是成功的。