Я использую Opscode application_python cookbook и пытается развернуть приложение 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"
}
}
)
Я уверен, что это можно настроить, но я не могу понять, как это сделать. Что я неправильно выставляю?
Я всегда явно создаю свой 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_virtualenv
ресурс из поваренной книги python, поэтому поваренная книга python должна быть указана как зависимость в вашей кулинарной книге.