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

时间:2017-04-21 23:41:04

标签: ruby chef chef-recipe temporary-files resource-cleanup

我想要的是能够清理我即使在厨师运行失败时创建的临时文件。所以像这样:

begin
  file file_path do
    action :create
  end

#do something

ensure
  file file_path do
    action :delete
  end
end

但是我似乎无法让这个工作。当我的#do something代码中断时,它会留下创建的文件。

似乎ensure在Chef run的Compile阶段进行了评估。因此,如果我将File.delete(file_path)置于确保块中,它将尝试在文件创建之前删除该文件(当资源(即begin中的文件创建)执行时,该文件处于Converge阶段/ p>

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果这是任何随机文件我不会那么担心清理,但因为它是一个pfx我暂时创建我不希望它在厨师退出后躺在那里。因此,根据松弛,这是我最终使用@coderanger推荐的解决方案。

<?php
session_start(); // Right at the top of your script
include('config.php');
if(!isset($_SESSION['username'])){ //if login in session is not set
    header("Location: pageMLC.php");
//$username=$_SESSION['username'];
}
?>

//Specify the query

$query = "SELECT first_name, last_name FROM person p, login l, shift_info si, shift_date sd, id_table id 
WHERE l.username = '$username' AND p.person_id=l.person_id;"; //AND si.shift_id=id.shift_id AND p.person_id=id.person_id AND sd.date_id=id.date_id";

//Store the result

$result = mysql_query($query) or die("SQL Error: <b>" . mysql_error() . "</b><br />");
?>
<!-- LANDING ----------------------------------------------
<!---------------------------------------------------------
<!--------------------------------------------------------->
<nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <a href="pageMLC_Dashboard.php"><img src="Images/logo.png" class="images" ></a>
          <a href="pageMLC_Dashboard.php"><button type="button" class="btn">Home</button></a></li>
          <a href="https://mobile.fairview.org" target="_blank"><button type="button" class="btn">Intranet</button></a>
          <a href="#"><button type="button" class="btn">Settings</button></a>
          <a href="#"><button type="button" class="btn">Profile</button></a>
          <a href="logout.php"><button type="button" class="btn">Logout</button></a>
        </div>
    </nav>

    <div class="container-fluid" id="myGroup">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
              <li class="active"><button type="button" class="btn btn-block" data-toggle="collapse" data-target="#dashboard">Dashboard</button><span class="sr-only">(current)</span></li>
              <li class="button"><button type="button" class="btn btn-block" data-toggle="collapse" data-target="#calendar">Calendar</button></li>
              <li class="button"><button type="button" class="btn btn-block" data-toggle="collapse" data-target="#updates">Organizational Updates</button></li>
              <li class="button"><button type="button" class="btn btn-block" data-toggle="collapse" data-target="#shift">Open Shift Page</button></li>
              <li class="button"><button type="button" class="btn btn-block" data-toggle="collapse" data-target="#super">Supervisor Editing Page</button></li>
          </ul>

        </div>  
          <div id="dashboard" class="collapse indent">
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
          <h1 class="page-header">Overview</h1>
        <p>                    <?php
echo " <h1>Hello ".$_SESSION["username"].",","</h1>";?>Welcome to the overview page! Here we will set up some backend code to remove all the pages and just have toggle-able panels or div classes that you interact with using the buttons in the nav/ sidebars.</p>

<table border="4" cellpadding="3" cellspacing="1">

<tr><th>First Name</th><th></th><th>Last Name</th>

<?php while ($row = mysql_fetch_array($result)) { ?>

  <tr><td><?php echo $row["first_name"] ?></td>

  <td><?php echo $row["last_name"] ?></td>

  </tr>

<?php } ?>

由于Tempfile的自动化,文件在退出时被清除 https://ruby-doc.org/stdlib-2.1.0/libdoc/tempfile/rdoc/Tempfile.html