我已经安装了opscode的PHP Cookbook和chef-dotdeb上的chef-dotdeb cookbook,以便我可以在流浪盒中运行 PHP 5.4 。
我想修改一些默认的php.ini
设置。
根据厨师php cookbook的文档,我可以使用
修改设置node['php']['directives'] = {}
例如:
node['php']['directives'] = { :short_open_tag => 'Off' }
我在我的应用程序cookbook中创建的webserver.rb
脚本中进行了修改。
当我配置或重新加载流浪盒时,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 -%>
这总是空的{}
然而....如果我将其修改为......
<% node.default[:php][:directives].sort_by { |key, val| key }.each do |directive, value| -%>
<%= "#{directive}=\"#{value}\"" %>
<% end -%>
然后将指令注入模板。我不是红宝石专家。这两个逻辑之间的根本区别是什么?
答案 0 :(得分:3)
可能是一个真正的长镜头,但我试图使用这个功能,并发现它不起作用,然后我实际上发现它是因为我在查看apache2 php.ini时默认只有菜谱添加设置到cli php.ini文件。对于Fedora / Redhat来说这可能不是问题,但它适用于Ubuntu,因为它将/ etc / php5 /下的配置分成不同的文件夹。
答案 1 :(得分:2)
使用Apache安装priestjims php时遇到同样的问题。 首先安装Apache并运行apache2 :: mod_php5并不意味着你可以省略php :: apache2这对我来说是个错误。
解决方案是包含php :: apache2 recipe,然后将它的php.ini写入&#39; apache_conf_dir&#39;。这样开发ini设置就像
default['php']['directives'] = {
'display_errors' => 'On',
'allow_url_fopen' => 'On',
'allow_url_include' => 'On',
'short_open_tag' => 'Off'
}
将正确应用于apache的php.ini。
答案 2 :(得分:1)
尝试使用:
node.set['php']['directives'] = { :short_open_tag => 'Off' }
如果这不起作用,您可以尝试使用覆盖选项:
node.override['php']['directives'] = { :short_open_tag => 'Off' }
从大厨11开始,您需要设置明确设置优先级:
https://wiki.opscode.com/display/chef/Breaking+Changes+in+Chef+11
答案 3 :(得分:0)
我知道这是一个很老的问题,但它可以帮助别人。
@
符号表示它是一个变量。模板资源具有变量属性,您可以在那里添加指令属性。
更多关于文档:
This attribute can also be used to reference a partial template file by using a Hash. For example:
template "/file/name.txt" do
variables :partials => {
"partial_name_1.txt.erb" => "message",
"partial_name_2.txt.erb" => "message",
"partial_name_3.txt.erb" => "message"
},
end
where each of the partial template files can then be combined using normal Ruby template patterns within a template file, such as:
<% @partials.each do |partial, message| %>
Here is <%= partial %>
<%= render partial, :variables => {:message => message} %>
<% end %>
https://docs.getchef.com/resource_template.html
如果你看到食谱php的ini
食谱:
template "#{node['php']['conf_dir']}/php.ini" do
source node['php']['ini']['template']
cookbook node['php']['ini']['cookbook']
unless platform?('windows')
owner 'root'
group 'root'
mode '0644'
end
variables(:directives => node['php']['directives'])
end
https://github.com/opscode-cookbooks/php/blob/master/recipes/ini.rb
它将node['php']['directives']
分配给模板中的变量。
答案 4 :(得分:0)
我遇到这个问题,我的PHP指令没有应用于运行Ubuntu 16.04的PHP。 我的解决方案是覆盖PHP的conf_dir以使配方跳过cli并仅更新Apache2使用的配置。
"override_attributes": {
"php": {
"conf_dir": "/etc/php/7.0/apache2"