我是 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.ini
和opcache.ini
。一个用于加载模块,另一个用于输入配置。
一个模块使用两个配置文件似乎有点浪费。有没有更简单的方法可以做到这一点?
答案1
我们正在使用 Remi repos,它是一个普通的 yum 包,我们不需要直接去 PECL。
因此,虽然您在底部使用的技术获得了有效的 zend opcache 设置,但我们通过仅安装php-pecl-zendopcache
yum 包找到了一种稍微更好的方法。
答案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