私はシェフが初めてです。 Chef PHP Cookbook を使用して、Zend OpCache(PHP 5.4はまだ組み込まれていないため)をインストールするレシピを書いてみました。
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
の2か所で行われます。
私が思いつき、働くことができる唯一の解決策はこれです
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
の2つのファイルが作成されます。 1つはモジュールのロード用で、もう1つは構成の配置用です。
1つのモジュールに2つの設定ファイルを使用するのは少しもったいないようです。これを行う簡単な方法はありますか?
Remiリポジトリを使用しています。これは通常のyumパッケージであり、PECLに直接アクセスする必要はありません。
したがって、下部で使用している手法ではzend opcacheのセットアップが機能しますが、php-pecl-zendopcache
yumパッケージをインストールするだけで少し良い方法が見つかりました。
クックブックで試してみてください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