我有一本 Chef 食谱,其中包含passenger_apache2::mod_rails
来自 Passenger_apache2 食谱的食谱。在服务器的第一次 Chef 运行中,这创建了两个(有效的)配置文件:
# /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
# /etc/apache2/mods-available/passenger.conf
PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby1.9.1
PassengerMaxPoolSize 6
这些是通过使用说明书的模板passenger.load.erb和passenger.conf.erb分别使用node[:languages][:ruby][:ruby_bin]
和创建的node[:languages][:ruby][:gems_dir]
。这些属性由 Ohai 自动填充。
在第二次运行时chef-client
,这些文件被搞砸了。这是他们现在的样子:
# /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /gems/passenger-3.0.11/ext/apache2/mod_passenger.so
# /etc/apache2/mods-available/passenger.conf
PassengerRoot /gems/passenger-3.0.11
PassengerRuby
PassengerMaxPoolSize 6
因此,在 Chef 运行期间似乎node[:languages][:ruby]
没有填充。但是,如果我直接从服务器上的 IRB 会话调用 Ohai,它会正确显示。
$ sudo -Hu root /usr/bin/irb1.9.1
irb(main):001:0> require 'yaml'
irb(main):002:0> require 'chef'
irb(main):003:0> node = YAML::load(`/usr/local/bin/ohai`)
irb(main):004:0> node['languages']['ruby']['ruby_bin']
=> "/usr/bin/ruby1.9.1"
irb(main):005:0> mash = Chef::Mash.new(node)
irb(main):006:0> mash[:languages][:ruby][:ruby_bin]
=> "/usr/bin/ruby1.9.1"
我可以修复该文件,但它不会阻止问题在下一次 Chef 运行时再次出现。我对如何进一步适当地解决此问题感到有些困惑。
有没有其他人遇到过这个问题?我还没有尝试在我的食谱或角色中手动设置这些属性,但我认为我不应该这样做;不应该覆盖自动属性。