web-dev-qa-db-ja.com

Chefのapplication_pythonクックブックを使用してvirtualenv pythonバージョンを指定する

Opscodeの application_python クックブックを使用していて、Djangoアプリケーションをデプロイしようとしています。このプロジェクトではPython 2.7を使用する必要があります、しかし、virtualenvの作成はデフォルトでpython2.6で行われているようですが、これはシステムにインストールする予定はありません。したがって、chef-clientを実行すると次のエラーが発生します。

[Fri, 08 Jun 2012 16:55:35 +0000] FATAL: Mixlib::ShellOut::ShellCommandFailed: execute[virtualenv --python=python2.6 /opt/apps/trippingbear/shared/env] (/var/chef/cache/cookbooks/python/providers/virtualenv.rb line 28) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '3'
---- Begin output of virtualenv --python=python2.6 /opt/apps/trippingbear/shared/env ----
STDOUT: The executable python2.6 (from --python=python2.6) does not exist
STDERR: 
---- End output of virtualenv --python=python2.6 /opt/apps/trippingbear/shared/env ----
Ran virtualenv --python=python2.6 /opt/apps/trippingbear/shared/env returned 3

私はChefにかなり(非常に)慣れていないので、それを変更する方法がわかりません。デフォルトはattribute :interpreter, :default => 'python2.6'cookbooks/python/resources/virtualenv.rbで設定されているようです。ノードと環境の両方で次のようにデフォルトを設定しようとしましたが、成功しませんでした。

default_attributes(
  "python" => {
    "virtualenv" => {
      "interpreter" => "python2.7"
    }
  }
)

これは設定可能だと確信していますが、その方法がわかりません。何を間違って設定していますか?

1
Brian Hicks

私は常にデプロイメントレシピでvirtualenvを明示的に作成し、必要に応じてそのvirtualenvを参照します。例えば:

venv_dir = node['some_identifier']['virtualenv_dir']

python_virtualenv venv_dir do
    interpreter "python"            # use system default python, not 2.6
    action :create
end 

python_pip "Django" do
    version "1.4"
    action :install
    virtualenv venv_dir
end

明らかに、これはpythonクックブックからpython_virtualenvリソースを使用しているため、pythonクックブックを依存関係としてリストする必要があります。クックブック。

0
William McVey