我遵循了几个关于 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 上的文档另有说明)