nginx - "include_recipe"与 Vagrantfile "chef.add_recipe"对比。有什么不同?

标签 nginx vagrant chef-recipe chef-solo

刚刚在我的 Vagrant 盒子上运行了 nginx::source recipe,我的行为非常不寻常。

当我包含来自 的食谱时 Vagrant 文件 (如下),一切都像魅力一样,

chef.add_recipe("project::nginx")
chef.add_recipe("nginx::source")



(project::nginx recipe 非常简单。使用它来覆盖 nginx 说明书的默认属性)

但如果我在 的最后包含一个食谱项目::nginx (提到),一切都崩溃了:

node.default['nginx']['server_names_hash_bucket_size'] = 128
include_recipe "nginx::source"

直到现在我都不知道这两个调用之间的行为有什么不同。这里有人知道有什么区别吗?

最佳答案

被我耍到了!厨师 11 功能。它的问题仅存在于 Chef-solo 中 :)

要快速制作简历,区别在于:

  • Chef.add_recipe() - 加载整个食谱上下文(所有文件,例如食谱、定义、属性...)
  • include_recipe ""- 不在扩展运行列表中的文件(属性、定义等)不会被加载。

  • 至少有 4 种方法可以解决此问题(将文件放入运行列表中):
  • include_attribute - 显式包含所需的属性文件。
  • metadata.rb->dependency - 如果您的食谱使用另一本食谱中的食谱,则将该食谱放在 metadata.rb 的依赖项部分,并且所有文件都将被加载。
  • Chef.add_recipe() - 通过 Vagrantfile 加载配方。 (此处提及仅供引用)
  • Berkshelf - 你也可以使用这个食谱管理器来解决这个问题。这是Stackoverflow thread about this exact problemsome Docs

  • 对于那些有兴趣进一步阅读的人,Chef 11 为非食谱文件引入了基于依赖的食谱加载。新的加载逻辑意味着属于cookbooks 的文件存在于cookbook_path 但不在扩展的run_list 或cookbooks 在扩展的run_list 中的依赖项将不再加载。 REF: Opscode breaking changes documentation ,如果你需要我得到的错误签名,here's完全一样的,即使是出于同样的原因。

    关于nginx - "include_recipe"与 Vagrantfile "chef.add_recipe"对比。有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361738/

    相关文章:

    node.js - 如何在 debian vagrant box 上安装 npm?

    linux - 使用 Chef 如何在从另一个文件读取输入后更新文件?

    node.js - 通过 SSL 的 WebSocket : Cloudflare

    selenium - [Vagrant][Jenkins][Behat][Selenium]如何组合它们?

    Vagrant 错误: symlink has no referent

    ruby - 您如何模块化 Chef Recipe ?

    ruby - 如何使用 include_recipe 检查 Recipe 是否已被包含?

    amazon-web-services - Api Gateway 与 Elastic Beanstalk 的连接(客户端 SSL 证书)

    ruby-on-rails - Passenger 没有安装官方的 Ubuntu Nginx 包

    redirect - nginx 重定向取决于主机