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

Развертывание Zend Opcache с помощью Chef PHP Cookbook

Я новичок в Chef. Я попытался написать рецепт установки Zend OpCache (для PHP 5.4, поскольку он еще не встроен), используя Поваренная книга PHP от шеф-повара.

Я пробовал использовать php_pear

php_pear "opcache" do
    package_name "ZendOpcache"
    action :install
    preferred_state "beta"
    zend_extensions ["opcache.so"]
    directives node['php']['opcache']['directives']
end

но .ini сгенерированный файл имеет ZendOpcache как префикс для переменных

ubuntu@webserver3:~$ cat /etc/php5/conf.d/ZendOpcache.ini 
; configuration for php ZendOpcache module
zend_extension=/usr/lib/php5/20100525/opcache.so
ZendOpcache.revalidate_freq="60"
ZendOpcache.enable_cli="1"
ZendOpcache.memory_consumption="128"
ZendOpcache.interned_strings_buffer="8"
ZendOpcache.fast_shutdown="1"
ZendOpcache.max_accelerated_files="4000"
ZendOpcache.save_comments="0"

префикс должен быть opcache.

Затем я попытался вручную создать .ini подать себя

template "#{node['php']['ext_conf_dir']}/opcache.ini" do
    source "extension.ini.erb"
    cookbook "php"
    owner "root"
    group "root"
    mode "0644"
    variables(:name => 'opcache', :extensions => {'/usr/lib/php5/20100525/opcache.so' => true}, :directives => node['php']['opcache']['directives'])
   action :create
end

Когда я пытался запустить PHP, появляется это предупреждение

PHP Warning:  Module 'Zend OPcache' already loaded in Unknown on line 0
[exec] PHP Warning:  Zend OPcache: module registration failed! in Unknown on line 0

Загрузка модуля opcache осуществляется в двух местах: ZendOpcache.ini и руководство opcache.ini.

Единственное решение, с которым я могу работать, - это

php_pear "opcache" do
    package_name "ZendOpcache"
    action :install
    preferred_state "beta"
    zend_extensions ["opcache.so"]
end

template "#{node['php']['ext_conf_dir']}/opcache.ini" do
    source "extension.ini.erb"
    cookbook "php"
    owner "root"
    group "root"
    mode "0644"
    variables(:name => 'opcache', :extensions => {}, :directives => node['php']['opcache']['directives'])
    action :create
end

это создаст два файла ZendOpcache.ini и opcache.ini. Один для загрузки модуля, а другой для установки конфигурации.

Использование двух конфигурационных файлов для одного модуля кажется немного расточительным. Есть ли более простой способ сделать это?

Мы используем репозитории Remi, это обычный пакет yum, и нам не нужно напрямую обращаться к PECL.

Таким образом, хотя метод, который вы используете внизу, дает работающую настройку zend opcache, мы нашли немного лучший способ, просто установив php-pecl-zendopcache ням пакет.

Попробуйте в своей кулинарной книге default.rb:

bash "adding zendopcache-7.0.3" do
  if `php -v | grep OPcache`.empty?
    code <<-EOH
    apt-get install -y php-pear build-essential php5-dev
    pecl install zendopcache-7.0.3
    EOH
  end
end

template "#{node[:php][:ext_conf_dir]}/opcache.ini" do
  source "opcache.ini.erb"
  mode "0644"
end