使用python_application Chef cookbook

时间:2013-10-24 18:07:14

标签: django chef lwrp

我正在尝试使用application_python cookbook提供的django资源:https://github.com/opscode-cookbooks/application_python

如果按照提供的示例进行操作 https://github.com/opscode-cookbooks/application_python/blob/master/examples/recipes-packaginator.rb 并且在mt元数据上声明了depends application_python,我收到以下错误:

No resource found for django. Tried application_django, application_python_django, django

所以我尝试按照Including a Chef LWRP from another cookbook中使用“application_python_django”资源而不仅仅是“django”的建议。我得到了:

No resource found for application_python_django. Tried application_application_python_django, application_python_application_python_django, application_python_django

有趣的是,如果删除应用程序资源并仅保留application_python_django资源,则抱怨是:

You must supply a name when declaring a application_python_django resource

!!!所以似乎找到了资源。因此,如果声明资源名称,则执行配方,但不执行任何操作django资源(在契约中,缺少许多参数,在应用程序资源中)。

啊,如果我删除了应用程序并只将资源留作django,那么也得到:

Cannot find a resource for django on ubuntu version 12.04

好吧,我很失落。

我的食谱的初步尝试是:

application 'radar_parlamentar' do
  path       '$HOME/radar_parlamentar'
  owner      'radar'
  repository 'https://github.com/leonardofl/radar_parlamentar.git'
  revision   'master'

  django do
    debug             true
    collectstatic     'build_static --noinput'
    database do
    database  'radarparlamentar'
      adapter   'mysql'
      username  'radarparlamentar'
      password  'secret'
    end
  end

  gunicorn do
    only_if { node['roles'].include? 'packaginator_application_server' }
    app_module :django
    port 8080
  end
end

TKS, 莱昂纳多

1 个答案:

答案 0 :(得分:2)

尝试在依赖“application_python”食谱之后向“应用程序”食谱添加依赖项。

终于找到了它为什么这样做的原因。它与metadata.rb。

中的依赖关系有关

要解决这个问题,你必须确保你的食谱中的依赖版本不会与所依赖的烹饪书中的版本相冲突。

在_application_python_ cookbook中,指定了对应用程序食谱的依赖性:

depends "application", "~> 3.0"

如果您的cookbook metadata.rb将依赖项指定为

depends "application", "~> 4.0"
depends "application_python", "~>3.0.1"

然后,Chef将无法加载应用程序 cookbook,因为应用程序的依赖项会发生冲突。来自_application_python_ cookbook的版本要求版本大于或等于3.0且低于4.0。您的食谱中的版本要求版本大于或等于4.0且低于5.0。

如果你没有在你的食谱中指定一个版本,你仍然会遇到冲突,因为Berkshelf(或其他依赖经理)会下载最新版本。

所以你需要让你的metadata.rb看起来像:

depends "application", "~> 3.0"
depends "application_python", "~>3.0.1"

让它发挥作用。

此答案也适用于具有相同问题的人:

  • application_ruby
  • application_java

或任何其他具有您自己的依赖性的烹饪书。