问题是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中的notifiessubscribes都在尝试访问在chef运行中定义的资源然后他们将要求对这些资源采取行动就你而言:
notifies :reload, 'service[sphinxsearch]', :delayed
正在查找名为servicesphinxsearch类型的资源,并对其调用reload操作如果在资源收集(编译)阶段结束时,chef找不到service[sphinxsearch]资源,则抛出错误您看不到安装的包,因为chef从未进入执行阶段。(更多关于厨师的两阶段性质,请参见this answer
如@IsabelHM所示,您可以通过添加

service 'sphinxsearch' do
  action [:enable, :start]
end

我建议您使用[:enable, :start]而不是:nothing,因为这将确保服务始终在运行,即使您的模板没有更改另外,请注意service资源没有为您添加服务配置因此,如果sphinxsearch包没有添加服务配置,您还需要一个cookbook_filetemplateremote_file资源来创建服务配置。

关于ruby - 为什么厨师不逐行执行配方?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33407605/

10-16 00:49