我正在尝试创建一个将使用一些很好的默认选项安装nginx + php-fpm的食谱,然后我的应用程序烹饪书可以使用它。
但Opscode PHP食谱似乎不支持php-fpm但是我注意到这个:https://github.com/priestjim/chef-php我检查了一个名为“chef-php”的食谱文件夹
在我的nginx + php cookbook的Berksfile中,我添加了:
cookbook 'chef-php', path: "../chef-php"
site :opscode
metadata
如果我在该食谱中运行berks install
,我会看到
Using chef-php (1.2.0) at '../chef-php'
包含在输出中,表明一切正常。
因此,如果我转到我的应用程序cookbook,其中包含以下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,如果这是真的,那么解决这类问题的正确方法是什么?或者我刚刚犯了一些愚蠢的错误(完全可能!)
感谢。
答案 0 :(得分:3)
以下Berksfile:
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'
答案 1 :(得分:3)
Berkshelf目前不支持嵌套的Berks文件。
我认为你是正确的,metadata.rb文件用于解决子 cookbook的依赖关系。这意味着您将无法指定源,因为metadata.rb不包含超出cookbook名称和版本约束的任何内容
Berkshelf存储库中的pull请求中有一个有趣的discussion关于避免嵌套Berks文件的原因(如何解决与其他问题相关的烹饪书的冲突路径)。
我正在以类似于你的方式使用Chef并遇到同样的问题。我正在使用的解决方法是拥有一个“应用程序”Berksfile。此文件包含整个应用程序的所有依赖项。在此文件上调用berks upload
会将所有依赖项上载到Chef服务器。
拉取请求讨论中提出的解决方法是在Berksfile中chef_api :config
之前使用site :opscode
。在查看opscode社区站点以获取配方之前,这将查看您的私有Chef服务器。 Onc的影响是,您需要在尝试上传需要它的食谱之前上传您的自定义食谱。