我遵循了几个关于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 FYI上尝试了上述方法
EDIT2 :
我使用knife
使用Precise32和一个全新的Vagrantfile和配方设置了一个新的框,我得到了同样的错误。我也尝试使用PECL安装XDebug,但是我得到了一个非常不正确的错误。
我已经使用我的配置和错误消息创建了一个Gist,希望人们可以看到错误。据我所知,php_pear
配方的php
提供商已被破坏。
您可以在此处查看要点: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
命令轻而易举。但是,使用PECL / PEAR安装软件包似乎在使用Chef的Debian中存在问题。所以问题仍然存在,找到了一种解决方法(这实际上是Debian的常规操作方式,尽管Github上的文档另有说明)
答案 0 :(得分:1)
使用资本似乎是通过php_pear
安装它php_pear 'APC' do
action :install
end
编辑:
最后我不得不通过包安装它,因为使用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 -%>
答案 1 :(得分:1)
我和流浪汉和厨师在centos 5上遇到过类似的问题。我把一些调试代码放到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
答案 2 :(得分:0)
在我的环境中,我通过以下修改解决了这个问题。你试过吗?
os:Ubuntu 12.04.1 LTS
chef-solo:10.16.6
成功:php_pear“APC”做
问题:php_pear“apc”做
似乎php配方不会忽略这种情况。
但我有另一个问题,配置选项是incorret。 “-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