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

そこで、「django」だけでなく「application_python_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」クックブックへの依存関係の後に、「application」クックブックへの依存関係を追加してみてください。

ついにそれがそれをしている理由を見つけました。これは、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
  • application_java

または、あなたのものにも依存関係がある他のクックブック。

于 2013-10-28T13:15:10.710 に答える