1

我正在尝试创建一个食谱,它将安装 nginx + php-fpm 并带有一些好的默认选项,然后我的应用程序食谱可以使用这些选项。

但是 Opscode PHP 食谱似乎不支持 php-fpm 但我注意到这个支持:https ://github.com/priestjim/chef-php我签入了一个名为“chef-php”的食谱文件夹

在我的 nginx+php 食谱的 Berksfile 中,我添加了:

cookbook 'chef-php', path: "../chef-php"

site :opscode

metadata 

如果我跑进berks install那本食谱,那么我会看到

 Using chef-php (1.2.0) at '../chef-php'

包含在输出中,表明一切正常。

因此,如果我然后转到我的应用程序说明书,其中包含以下 Berksfile:

cookbook 'pogo-nginx-php', path: "../pogo-nginx-php"

site :opscode

metadata 

并运行berks install我得到以下错误:

Cookbook 'chef-php' not found in any of the default locations

我已经读过,当解决依赖关系的依赖关系时,Berkshelf 使用 metadata.rb 而不是 Berksfile,如果这是真的,那么解决此类问题的正确方法是什么?还是我刚刚犯了一些愚蠢的错误(完全有可能!)

谢谢。

4

2 回答 2

3

Berkshelf 目前不支持嵌套的 Berksfiles。

我认为 metadata.rb 文件用于解决食谱的依赖关系是正确的。这意味着您将无法指定源,因为 metadata.rb 不包含超出食谱名称和版本限制的任何内容

在 Berkshelf 存储库中有一个关于避免嵌套 Berksfiles 的原因的拉取请求的有趣讨论(如何解决与食谱冲突的路径以及其他问题)。

我以与您类似的方式使用 Chef 并遇到了同样的问题。我正在使用的解决方法是拥有一个“应用程序”Berksfile。该文件包含整个应用程序的所有依赖项。berks upload对该文件的调用会将您的所有依赖项上传到 Chef 服务器。

拉取请求讨论中提出的解决方法是在您的 Berksfile中使用chef_api :configbefore 。site :opscode在查看 opscode 社区站点以获取食谱之前,这将查看您的私人 Chef 服务器。这样做的一个影响是,您需要先上传您的自定义食谱,然后再尝试上传需要它的食谱。

于 2013-12-10T11:30:53.770 回答
3

以下 Berks 文件:

site :opscode

cookbook "chef-php", github: "priestjim/chef-php"

下载以下食谱:

$ berks install
Installing chef-php (1.2.0) from git: 'git://github.com/priestjim/chef-php.git' with branch: 'master' at ref: '19a5474e14ae2d9d05fc670aeb0cf122c3859acb'
Installing build-essential (1.4.2) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing xml (1.2.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing yumrepo (2.0.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing yum (2.4.4) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
于 2013-12-09T22:35:04.970 回答