在AWS Opsworks Cookbooks Repository的mod_php5_apache2 cookbook内,您会在recipes/php.rb
中找到以下内容(为清晰起见而被删除):
# setup Apache virtual host
node[:deploy].each do |application, deploy|
include_recipe 'apache2::service'
if deploy[:application_type] != 'php'
Chef::Log.debug("Skipping mod_php5_apache2::php application #{application} as it is not an PHP app")
next
end
web_app deploy[:application] do
...
end
...
end
这将迭代所有 node[:deploy]
中标记为PHP应用程序的应用程序,其中包括为HTTP和HTTPS创建apache2配置(vhost)。
这在运行 Setup 生命周期事件时出现问题,因为Opsworks(Chef运行)将尝试为node[:deploy]
对象中的所有内容创建配置,即使这些配置没有&#39 ; t适用于当前正在执行的(设置)实例或图层。
我有一个可行的鸭子磁带解决方案:覆盖我自己的存储库中提供的php.rb
,并在顶部添加自定义的应用程序到层映射字典。
map = {
"phpapp1" => "layer1_php_application",
"phpapp2" => "layer2_custom",
"phpapp3" => "layer3_custom"
}
# setup Apache virtual host
node[:deploy].each do |application, deploy|
if node[:opsworks][:instance][:layers].include? map[application]
...
include_recipe 'apache2::service'
if deploy[:application_type] != 'php'
Chef::Log.debug("Skipping mod_php5_apache2::php application #{application} as it is not an PHP app")
next
end
web_app deploy[:application] do
...
end
...
end
end
但感觉真的很糟糕,因为我已将应用和图层名称直接捆绑到我的食谱中。
虽然conf文件在/etc/apache2/sites-available
中存在问题,但在/var/srv/
和/var/log/apache2
中可以找到类似的不需要的文件......
解决此问题的最佳方法是:
节点对象上有什么东西我可以用作我错过的过滤器吗?谢谢!