使用chef php cookbook修改php.ini设置

BNK*_*BNK 6 php ruby cookbook chef-infra vagrant

我从Opscode公司,并在发现厨师dotdeb菜谱安装了PHP食谱厨师dotdeb,这样我可以运行PHP 5.4的流浪汉框.

我想修改一些默认php.ini设置.

根据厨师php cookbook的文档,我可以使用修改设置

node['php']['directives'] = {}
Run Code Online (Sandbox Code Playgroud)

例如:

node['php']['directives'] = { :short_open_tag => 'Off' }
Run Code Online (Sandbox Code Playgroud)

我已经webserver.rb在我的应用程序cookbook中创建的脚本中进行了修改.当我配置或重新加载流浪盒时,php.ini设置保持不变.

有什么想法有什么不对?

webserver.rb文件的内容是:

include_recipe"nginx"

include_recipe"php"

node.default ["php"] ["指令"] = {:short_open_tag =>'关'}

甚至当我删除dotdeb食谱,以便唯一的PHP东西来自官方的opscode php食谱它仍然不会更新任何ini值.

附加信息

我查看了opscode php cookbook中的代码,它实际上将指令注入到erb php.ini模板中:https: //github.com/opscode-cookbooks/php/blob/master/templates/ubuntu/php.ini. ERB

注入将指令追加到文件末尾的代码是:

<% @directives.sort_by { |key, val| key }.each do |directive, value| -%>
<%= "#{directive}=\"#{value}\"" %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

这总是空的{}

但是....如果我修改它...

<% node.default[:php][:directives].sort_by { |key, val| key }.each do |directive, value| -%>
<%= "#{directive}=\"#{value}\"" %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

然后将指令注入模板中.我不是红宝石专家.这两个逻辑之间的根本区别是什么?

小智 1

尝试使用:

node.set['php']['directives'] = { :short_open_tag => 'Off' }
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以尝试使用覆盖选项:

node.override['php']['directives'] = { :short_open_tag => 'Off' }
Run Code Online (Sandbox Code Playgroud)

从 Chef 11 开始,您需要明确设置优先级:

https://wiki.opscode.com/display/chef/Breaking+Changes+in+Chef+11