3

我正在尝试使用 application_python 食谱提供的 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

因此,我尝试遵循使用“application_python_django”资源而不是“django”资源从另一本食谱中包含 Chef LWRP中的建议。我得到了:

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,莱昂纳多

4

1 回答 1

2

尝试在“application_python”说明书的依赖项之后向“应用程序”说明书添加依赖项。

终于找到了这样做的原因。它与 metadata.rb 中的依赖关系有关。

为了解决这个问题,你必须确保你的食谱中的依赖版本不与依赖的食谱中的版本冲突。

在 _application_python_ 说明书中,指定了对应用程序说明书的依赖:

depends "application", "~> 3.0"

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

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

然后 Chef 将无法加载应用程序说明书作为应用程序冲突的依赖项。_application_python_ 食谱中的那个要求版本大于或等于 3.0 且低于 4.0。您的食谱中的版本需要大于或等于 4.0 且低于 5.0 的版本。

如果您没有在说明书中指定版本,您仍然会遇到冲突,因为 Berkshelf(或其他依赖项管理器)将下载最新版本。

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

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

让它工作。

这个答案也适用于那些有同样问题的人:

  • application_ruby
  • 应用程序_java

或任何其他具有您的依赖项的食谱。

于 2013-10-28T13:15:10.710 回答