Ruby ERB如何创建挂载点列表

时间:2014-08-17 17:54:07

标签: ruby erb puppet

我正在尝试使用ERB模板动态创建文件系统的挂载点列表,以便Nagios监视磁盘使用情况。我无法弄清楚ERB的确切语法,我让它直接在Ruby中工作。

以下是我为ERB所尝试的内容

 <% @str = `df -h`; @str.scan(/\/[\w\/]+$/){|m| -%><%= -p @m %><% unless m.match(/\/dev|\/proc/)};puts %>

这是我的代码,以及在Ruby CLI中工作的所需输出:

ruby -e '
str = `df -h`
str.scan(/\/[\w\/]+$/){|m| print "-p #{m} " unless m.match(/\/dev|\/proc/)};puts'
-p /net -p /home -p /Network/Servers <-- Output

1 个答案:

答案 0 :(得分:1)

首先,您不需要在模板中运行。你可能有一些ruby代码推出模板(如Rails控制器或Sinatra类)。您可以将代码放在那里,并将输出存储在模板中显示(例如假设为rails)。

其次,你不想使用print或puts (因为那些会输出到终端而不是模板),而是将输出存储在变量中。

控制器:

class MountPointsController < ApplicationController
  def index
    @output = ""
    str = `df -h`
    str.scan(/\/[\w\/]+$/){|m| output << "-p #{m} " unless m.match(/\/dev|\/proc/)};output << "\n"
  end
end

模板就这么简单(注意'&lt;%='表示“在模板中输出结果):

<%= @output %>

即使我建议反对,这里有一个包含模板中所有代码的示例:

<% @output = "" %>
<% str = `df -h` %>
<% str.scan(/\/[\w\/]+$/){|m| output << "-p #{m} " unless m.match(/\/dev|\/proc/)};output << "\n" %>
<%= @output %>