使用 Chef PHP Cookbook 部署 Zend Opcache

使用 Chef PHP Cookbook 部署 Zend Opcache

我是 Chef 新手。我尝试编写一个安装 Zend OpCache 的配方(适用于 PHP 5.4,因为它尚未内置),使用Chef 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.iniopcache.ini。一个用于加载模块,另一个用于输入配置。

一个模块使用两个配置文件似乎有点浪费。有没有更简单的方法可以做到这一点?

答案1

我们正在使用 Remi repos,它是一个普通的 yum 包,我们不需要直接去 PECL。

因此,虽然您在底部使用的技术获得了有效的 zend opcache 设置,但我们通过仅安装php-pecl-zendopcacheyum 包找到了一种稍微更好的方法。

答案2

在你的食谱中尝试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

相关内容