Ruby 即使在chef运行失败后也要清理/删除临时文件
我希望能够清理我创建的临时文件,即使在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
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,文件在退出时被清理