我遵循了一些关于Vagrant和Chef Solo的教程和指南,但是当我想使用Chef Solo配置我的Precise64 VM时,我遇到了问题。在安装PHP5.3和PECL和PEAR之后,该配方需要安装APC,但是它无法找到包,尽管APC在PECL上可用。这是我得到的信息。
RuntimeError
------------
Package apc not found in either PEAR or PECL.
Cookbook Trace:
---------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/providers/pear.rb:259:in `pecl?'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/providers/pear.rb:107:in `load_current_resource'
Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/web-app/recipes/webserver.rb
17: package "libpcre3-dev"
18: php_pear "apc" do
19: action :install
20: end
21:
首先,我认为我的PECL和PEAR不是最新的,但是它们事先使用以下方法更新:
# update the main channels
php_pear_channel 'pear.php.net' do
action :update
end
php_pear_channel 'pecl.php.net' do
action :update
end
编辑:在vagrant ssh
进入我的盒子并运行sudo pecl install apc
之后,它似乎解决了这个包。这个食谱出了问题。我已经在Debian Squeeze 64和Ubuntu Server Precise 64上尝试了上述方法,仅供参考
EDIT2 :我已经设置了一个新的盒子,使用Precise32和一个全新的Vagrantfile和配方使用knife
,我得到同样的错误。我也尝试使用PECL安装XDebug,但我得到一个非常无意义的错误。
我已经用我的配置和我得到的错误信息创建了一个Gist,希望人们可以看到哪里出了问题。据我所见,php
配方的php_pear
提供程序已损坏。
你可以在这里看到要点:https://gist.github.com/4492004
简直要把我逼疯了…最简单的事情不会与Chef-solo工作,当遵循最基本的在线教程时,我得到了各种各样的错误。激怒。
EDIT3 当访问https://github.com/opscode-cookbooks/php时,您将看到配方php::module_apc
已被弃用,而PEAR/PECL或包安装更好。我想知道他们是如何实现php::module_apc
配方的,并发现了这个(https://github.com/opscode-cookbooks/php/blob/master/recipes/module_apc.rb):
case node['platform_family']
when "rhel", "fedora"
%w{ httpd-devel pcre pcre-devel }.each do |pkg|
package pkg do
action :install
end
end
php_pear "apc" do
action :install
directives(:shm_size => "128M", :enable_cli => 0)
end
when "debian"
package "php-apc" do
action :install
end
end
所以很明显他们现在在使用Debian/Ubuntu时使用php_pear
命令是错误的,但是没有任何文档记录。看到PEAR/PECL是安装PHP附加组件的最标准方式,我专注于让它工作,但是看到这一点,我想我必须参考使用package
命令。我会问Opscode的人为什么他们为Debian例外。
最后一章伟大的成功!使用package
命令非常简单。然而,在使用Chef的Debian中,使用PECL/PEAR安装包似乎有问题。所以问题仍然存在,找到了一个解决方案(这实际上是Debian的正常操作方式,尽管Github上的文档另有建议)
使用大写似乎通过php_pear安装
php_pear 'APC' do
action :install
end
编辑:最后,我不得不通过package安装它,因为使用php_pear会创建带有大写指令的ini文件,并且无法正确读取。如APC.shm_size
是无效的。
我最终做了这样的事情:
package "php-apc"
template "#{node['php']['ext_conf_dir']}/apc.ini" do
source "apc.ini.erb"
owner "root"
group "root"
mode "0644"
variables(:name => "apc", :extensions => ["apc.so"], :directives => {"shm_size" => "256"})
action action
end
我创建了自己的apc.ini.erb模板文件:
; configuration for php <%= @name %> module
<% @extensions.each do |filepath, zend| -%>
extension=<%= filepath %>
<% end -%>
<% @directives.each do |k,v| -%>
<%= "#{@name}.#{k}='"#{v}'"" %>
<% end -%>
我在centos 5的vagrant和chef上遇到了类似的问题。我将一些调试代码放入php cookbook中,看到它正在尝试运行此命令pecl -d preferred_state=stable search -c pecl.php.net APC'
我收到的输出是
Retrieving data...0%.Invalid xml downloaded from "http://pecl.php.net/rest/p/dom_varimport/info.xml": XML Error: 'Invalid character' on line '13'
原来我运行的是一个非常旧的php pear版本。我通过运行以下命令
修复了它pear upgrade -f PEAR
在我的环境中,我通过以下修改解决了这个问题。你试过吗?
os: Ubuntu 12.04.1 LTS
chef-solo: 10.16.6
success: php_pear "APC" do
问题:php_pear "apc" do
看来php的配方是不能忽略的。
但我有另一个问题,配置选项不正确。"-e"被分配给第一个选项。(它只发生在ubuntu中。在centos6中没有。
chef-solo(log_level :debug)
running: /tmp/pear/temp/APC/configure --enable-apc-debug=-e --enable-apc-filehits=no --enable-apc-spinlocks=no --enable-apc-memprotect=no --enable-apc-pthreadmutex=no --enable-apc-pthreadrwlocks=yes
pecl install apc
running: /tmp/pear/temp/APC/configure --enable-apc-debug=no --enable-apc-filehits=no --enable-apc-spinlocks=no --enable-apc-memprotect=no --enable-apc-pthreadmutex=no --enable-apc-pthreadrwlocks=yes