【问题标题】:Modifying php.ini setting with chef php cookbook使用 Chef php cookbook 修改 php.ini 设置
【发布时间】:2016-08-16 21:06:59
【问题描述】:

我已经安装了来自 opscode 的 PHP Cookbook 和位于 chef-dotdeb 的 chef-dotdeb 食谱,以便我可以在 vagrant box 中运行 PHP 5.4

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

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

node['php']['directives'] = {}

例如:

node['php']['directives'] = { :short_open_tag => 'Off' }

我在我的应用程序说明书中创建的webserver.rb 脚本中进行了修改。 当我配置或重新加载 vagrant box 时,php.ini 设置保持不变。

有什么想法吗?

webserver.rb 文件的内容是:

include_recipe "nginx"

include_recipe "php"

node.default["php"]["directives"] = { :short_open_tag => 'Off' }

即使我删除了 dotdeb 食谱以便唯一的 php 内容来自官方 opscode php 食谱,它仍然不会更新任何 ini 值。

附加信息

我查看了 opscode php 食谱中的代码,该代码实际上将指令注入到 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 -%>

然后指令被注入到模板中。我不是红宝石专家。这两条逻辑的根本区别是什么???

【问题讨论】:

  • 对于某些食谱,重新配置很少对我有用。您是否明确尝试过完整的vagrant destroyvagrant up
  • 摧毁了盒子,然后做了一个流浪者,但仍然没有工作:(
  • 我的心灵感应能力在某种程度上受到了限制。显示更多代码(webserver.rb),如何调用配方和输出。
  • 我使用override_attributes('php'=&gt; { 'conf_dir'=&gt;'/etc/php5/apache2' } ),它会更新 apache 配置而不是 cli...这不是最干净的解决方案,但如果您只需要更新您的网络服务器配置,这是最简单的方法。

标签: php ruby chef-infra vagrant cookbook


【解决方案1】:

可能是一个真正的远景,但我试图使用此功能并发现它不起作用,然后我实际上发现这是因为我正在查看 apache2 php.ini,而默认情况下食谱只添加了设置到 cli php.ini 文件。这对于 Fedora/Redhat 来说可能不是问题,但对于 Ubuntu 来说是这样,因为它将 /etc/php5/ 下的配置分离到不同的文件夹中。

【讨论】:

  • 这里有同样的问题。我通过创建自定义模板并使用厨师模板编写文件来解决这个问题。
【解决方案2】:

在 Apache 中安装 pastejims php 时遇到了同样的问题。 首先安装 Apache 并运行 apache2::mod_php5 并不意味着您可以忽略对我来说是错误的 php::apache2。

解决方案是包含 php::apache2 配方,然后将其 php.ini 写入“apache_conf_dir”。这样开发ini设置像

default['php']['directives'] = {
     'display_errors' => 'On',
     'allow_url_fopen' => 'On',
     'allow_url_include' => 'On',
     'short_open_tag' => 'Off'
}

将正确应用到 apache 的 php.ini。

【讨论】:

    【解决方案3】:

    尝试使用:

    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

    【讨论】:

    • 感谢您的回复。我已经尝试过这些并且已经阅读了文档的那部分。恐怕没修好:(
    • 当我尝试这个时,这是生成的代码 short_open_tag="Off" 但它应该是 short_open_tag = Off 并且它只是附加到 cli/php.ini 而不是 apache2/php.ini
    【解决方案4】:

    我知道这是一个很老的问题,但它可能对其他人有所帮助。

    @ 符号表示它是一个变量。模板资源具有 variables 属性,您可以在其中添加 directives 属性。

    更多关于文档:

    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

    如果你看到cookbook 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'] 分配给模板中的变量。

    【讨论】:

      【解决方案5】:

      遇到了这个问题,我的 PHP 指令未应用于运行 Ubuntu 16.04 的 PHP。 我的解决方案是覆盖 PHP 的 conf_dir 以使配方跳过 cli 并仅更新 Apache2 使用的配置。

      "override_attributes": {   
            "php": {
                  "conf_dir": "/etc/php/7.0/apache2"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-07
        • 2013-02-27
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多