Ruby 即使在chef运行失败后也要清理/删除临时文件

Ruby 即使在chef运行失败后也要清理/删除临时文件,ruby,chef-infra,chef-recipe,temporary-files,resource-cleanup,Ruby,Chef Infra,Chef Recipe,Temporary Files,Resource Cleanup,我希望能够清理我创建的临时文件,即使在chef运行失败时也是如此。比如说: begin file file_path do action :create end #do something ensure file file_path do action :delete end end 然而,我似乎无法让这个工作。当我的#do something代码中断时,它会留下创建的文件 似乎确保在chef运行的编译阶段对进行评估。因此,如果我将File.delete(F

我希望能够清理我创建的临时文件,即使在chef运行失败时也是如此。比如说:

begin
  file file_path do
    action :create
  end

#do something

ensure
  file file_path do
    action :delete
  end
end
然而,我似乎无法让这个工作。当我的
#do something
代码中断时,它会留下创建的文件

似乎
确保在chef运行的编译阶段对
进行评估。因此,如果我将
File.delete(File_path)
放在sure块中,它会在创建文件之前尝试删除该文件(在执行资源时,即
begin
中的文件创建,处于聚合阶段)


我知道您也可以创建自己的异常处理程序,但这似乎超出了我的需要。

如Slack上所述,Chef的双过程模型不允许这种代码。更重要的是,临时文件的概念与配方代码的工作方式不兼容。只需不用麻烦删除该文件。

如Slack上所述,Chef的双过程模型不允许这种代码。更重要的是,临时文件的概念与配方代码的工作方式不兼容。只是不要麻烦删除文件。

如果这是任何随机文件,我不会太在意清理,但因为它是我临时创建的pfx,我不希望它在厨师运行结束后被丢弃。因此根据lack,这是@coderanger推荐我最终使用的解决方案

Tempfile.create(["cert",".pfx"]) do |f|
  f.write(cert_string)
  f.close
  notifying_block do
    batch "Import cert using certutil" do
      #so stuff
    end
  end
end
由于Tempfile的automagic,文件在退出时被清理

如果这是任何随机文件,我不会太在意清理,但因为这是我临时创建的一个pfx,我不希望它在厨师运行结束后被丢弃。因此,根据slack,这是@coderanger推荐使用的解决方案

Tempfile.create(["cert",".pfx"]) do |f|
  f.write(cert_string)
  f.close
  notifying_block do
    batch "Import cert using certutil" do
      #so stuff
    end
  end
end
由于Tempfile的automagic,文件在退出时被清理