问题是chef首先尝试安装模板,然后才安装包如果我注释模板块,厨师将安装斯芬克斯搜索包罚款。
但是如果模板块没有被注释,sphinxsearch包就没有安装,chef就会出错
资源模板[/etc/sphinxsearch/sphinx.conf]配置为使用操作重新加载通知资源服务[sphinxsearch],但在资源集合中找不到服务[sphinxsearch]`
为什么会这样?
##
# Install system packages
##
node['website']['packages'].each do |pkg|
log 'Installing ' + pkg
package pkg
end
##
# Configure sphinx
##
template "/etc/sphinxsearch/sphinx.conf" do
source 'sphinx.erb'
owner 'root'
group 'root'
mode 00644
notifies :reload, 'service[sphinxsearch]', :delayed
end
最佳答案
chef中的notifies
和subscribes
都在尝试访问在chef运行中定义的资源然后他们将要求对这些资源采取行动就你而言:notifies :reload, 'service[sphinxsearch]', :delayed
正在查找名为service
的sphinxsearch
类型的资源,并对其调用reload
操作如果在资源收集(编译)阶段结束时,chef找不到service[sphinxsearch]
资源,则抛出错误您看不到安装的包,因为chef从未进入执行阶段。(更多关于厨师的两阶段性质,请参见this answer)
如@IsabelHM所示,您可以通过添加
service 'sphinxsearch' do
action [:enable, :start]
end
我建议您使用
[:enable, :start]
而不是:nothing
,因为这将确保服务始终在运行,即使您的模板没有更改另外,请注意service
资源没有为您添加服务配置因此,如果sphinxsearch包没有添加服务配置,您还需要一个cookbook_file
、template
或remote_file
资源来创建服务配置。关于ruby - 为什么厨师不逐行执行配方?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33407605/