【发布时间】: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 destroy和vagrant up? -
摧毁了盒子,然后做了一个流浪者,但仍然没有工作:(
-
我的心灵感应能力在某种程度上受到了限制。显示更多代码(webserver.rb),如何调用配方和输出。
-
我使用
override_attributes('php'=> { 'conf_dir'=>'/etc/php5/apache2' } ),它会更新 apache 配置而不是 cli...这不是最干净的解决方案,但如果您只需要更新您的网络服务器配置,这是最简单的方法。
标签: php ruby chef-infra vagrant cookbook