1

我遵循了几个关于 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,但我得到了一个非常无意义的错误。

我已经用我的配置和收到的错误消息创建了一个要点,希望人们能看到什么是错误的。据我所见,-recipe 的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命令轻而易举。但是,在使用 Chef 的 Debian 中,使用 PECL/PEAR 安装软件包似乎是有问题的。所以问题仍然存在,找到了一种解决方法(这实际上是 Debian 的正常操作方式,尽管 Github 上的文档另有说明)

4

3 回答 3

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 -%>
于 2013-02-12T09:37:52.213 回答
1

我在 centos 5 上遇到了与 vagrant 和 chef 类似的问题。我在 php 食谱中放了一些调试代码,发现它正在尝试运行这个命令 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
于 2014-09-24T21:06:18.860 回答
0

在我的环境中,我通过以下修改解决了它。你试过了吗?

操作系统:Ubuntu 12.04.1 LTS

厨师独奏:10.16.6

成功:php_pear "APC" 做

问题:php_pear "apc" 做

似乎 php recipe 并没有忽略这种情况。

但是我还有另一个问题是配置选项不正确。“-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
于 2013-01-12T05:48:42.747 回答