Назад | Перейти на главную страницу

Как использовать только провайдер «php_pear» от Chef из кулинарной книги «php»

При использовании Vagrant (а затем и Chef) я настраиваю свою виртуальную машину с помощью Zend Server CE, который автоматически устанавливает обычно * стек AMP.

Я хотел бы установить некоторые пакеты через PEAR, для которых в кулинарной книге "php" уже есть провайдер "pear" и "pear_channel". Однако, позвонив require_recipe("php"), default.rb запускается автоматически и пытается переустановить PHP.

Я просто хочу воспользоваться преимуществами нескольких поставщиков, не выполняя default.rb.

Есть ли способ сделать это?

Вы можете указать, что ваша кулинарная книга зависит от кулинарной книги opscode php, добавив depends 'php' в файл metadata.rb вашей кулинарной книги. Используя зависимости, вам не нужно запускать поваренную книгу php. Видеть http://wiki.opscode.com/display/chef/Metadata#Metadata-depends

Затем, предполагая, что поваренная книга php доступна с вашего сервера-повара, запуск chef-client откроет поваренную книгу php, чтобы были доступны ресурсы php_pear и php_pear_channel. В своем собственном рецепте просто добавьте инструкции в соответствии с рецептом php:

php_pear "DB" do
  action :install
end

Вы должны убедиться, что все рецепты от шеф-повара идемпотентны и не наносят вреда окружающей среде. Chef всегда запускает default.rb, когда вы требуете или включаете рецепт.

Два способа исправить это:

  1. Сделайте проверку рецепта PHP на наличие установленных двоичных файлов PHP и ничего не делайте, если они найдены
  2. Переместите шаги установки в новый файл рецептов вне default.rb

Номер один - лучшее решение, но если у вас действительно есть ситуации, когда вы хотите использовать PEAR, но не имеете возможности повара управлять php, вы можете сделать второе.