web-dev-qa-db-ja.com

Chefを使用したZendOpcacheのデプロイPHP Cookbook

私はシェフが初めてです。 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.iniopcache.iniの2つのファイルが作成されます。 1つはモジュールのロード用で、もう1つは構成の配置用です。

1つのモジュールに2つの設定ファイルを使用するのは少しもったいないようです。これを行う簡単な方法はありますか?

1
Petra Barus

Remiリポジトリを使用しています。これは通常のyumパッケージであり、PECLに直接アクセスする必要はありません。

したがって、下部で使用している手法ではzend opcacheのセットアップが機能しますが、php-pecl-zendopcacheyumパッケージをインストールするだけで少し良い方法が見つかりました。

1
Wyatt Barnett

クックブックで試してみてください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
0
Amadu Bah