如何在执行时读取文件内容?厨师在编译时读取

Eye*_*Eye 7 ruby io chef-infra

因为我遇到了我向Mixlib团队报告的MIXLIB-11错误,我需要找一个散步,替代Mixlib :: Shellout.

简要说明问题:

是一个声明"*毫不奇怪 - 读取是在编译时发生的,但remote_file资源实际上在执行时创建的.**"

由于此功能,Mixlib::Shellout.new("ls", :cwd => '/opt/cubrid/share/webmanager')引发" 无此类文件或目录 "错误,即使该目录是在执行时由此当前配方中包含的先前配方创建的.

有没有办法在执行时读取文件/目录?

Eye*_*Eye 14

找到答案:将代码包装好ruby_block,并在运行时执行.

ruby_block "Check if CURBID Web Manager needs installation" do
  block do
    version = ""

    if File.exists?("#{CWM_HOME_DIR}/appLoader.js")
      # Read the CWM version from file.
      f = File.open("#{CWM_HOME_DIR}/appLoader.js")

      pattern = /Ext\.cwm\.prodVersion = '(\d+\.\d+\.\d+\.\d+)'/

      f.each {|line|
        if match = pattern.match(line)
          version = match[1]
          break
        end
      }

      f.close
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,从上一个配方中创建的文件中正确填充版本.