【问题标题】:Using python_application Chef cookbook使用 python_application 厨师食谱
【发布时间】:2013-11-03 14:20:11
【问题描述】:

我正在尝试使用 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”来遵循Including a Chef LWRP from another cookbook 中的建议。我得到了:

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,a 也得到:

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

【问题讨论】:

  • 请不要忘记将答案标记为正确! :)
  • hummm ...我没有找到怎么做写一个低级配方...

标签: django chef-infra lwrp


【解决方案1】:

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

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

要解决此问题,您必须确保您的说明书中的依赖项版本不会与依赖的说明书中的版本冲突。

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

depends "application", "~> 3.0"

如果你的说明书 metadata.rb 将依赖项指定为

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

然后 Chef 将无法加载 application 食谱,因为 application 冲突的依赖项。 _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
  • application_java

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

【讨论】:

  • 是的,我在使用 application_ruby 时遇到了这个问题。改变依赖的顺序似乎已经解决了这个问题。但是,我不确定了。我仍然有这个问题。你在使用 Berkshelf 和/或 Vagrant 吗?
  • 这似乎对我不起作用,无论我重新订购或使用什么。你在使用 chef-solo / Berkshelf / Vagrant 吗?这就是我的用例。
  • 我有同样的用例。您是否为依赖项指定版本?
  • 我最初没有版本,但发现了这个问题并按照建议添加了它们,但仍然没有骰子.. 3.0.0 和 3.0.1 都试过了。也试过不添加应用程序依赖,删除 Berkshelf 缓存。我确定缺少某些东西,但无法弄清楚是什么。任何指针都非常感谢。
  • 你能发布你的 metadata.rb 吗?你还有其他依赖吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2021-11-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多