5

eruby 和 erb 和有什么不一样?是什么因素促使我选择其中一个?

我的应用程序正在为网络设备(路由器、负载平衡器、防火墙等)生成配置文件。我的计划是模板化配置文件,在源文件中使用嵌入式 ruby​​(通过 eruby 或 erb)来执行诸如迭代生成路由器的所有接口配置块之类的事情(这些块都非常相似,仅在标签上有所不同和 IP 地址)。例如,我可能有一个这样的配置模板文件:

hostname sample-router
<%=
r = String.new;
[
    ["GigabitEthernet1/1", "10.5.16.1"],
    ["GigabitEthernet1/2", "10.5.17.1"],
    ["GigabitEthernet1/3", "10.5.18.1"]
].each { |tuple|
    r << "interface #{tuple[0]}\n"
    r << "    ip address #{tuple[1]} netmask 255.255.255.0\n"
}
r.chomp
%>
logging 10.5.16.26

当通过嵌入式 ruby​​ 解释器(erb 或 eruby)运行时,会产生以下输出:

hostname sample-router
interface GigabitEthernet1/1
    ip address 10.5.16.1 netmask 255.255.255.0
interface GigabitEthernet1/2
    ip address 10.5.17.1 netmask 255.255.255.0
interface GigabitEthernet1/3
    ip address 10.5.18.1 netmask 255.255.255.0
logging 10.5.16.26
4

3 回答 3

9

没关系,两者都是一样的。erb 是纯 ruby​​,eruby 是用 C 编写的,所以它有点快。

erubis(第三个)是纯红宝石,比上面列出的两个都快。但我怀疑它的速度是你的瓶颈,所以只需使用 erb。它是 Ruby 标准库的一部分。

于 2008-09-16T17:27:51.640 回答
2

Eruby 是一个外部可执行文件,而 erb 是 Ruby 中的一个库。如果您想要独立处理您的模板文件(例如快速和肮脏的 PHP 替换),您将使用前者,如果您需要在其他 Ruby 脚本的上下文中处理它们,则使用后者。使用 ERB 更常见,因为它更灵活,但我承认我曾涉足 eruby.rhtml为快速的小型实用程序网站执行文件而感到内疚。

于 2008-09-16T17:29:41.213 回答
0

我正在使用 erb 做类似的事情,性能对我来说很好。

正如 Jordi 所说,这取决于你想在什么环境中运行它——如果你真的要使用你列出的模板,eruby 可能会更好,但我猜你实际上会通过模板的变量,在这种情况下你需要 erb.

仅供参考,使用 erb 时,您需要将要从中获取变量的对象的绑定传递给它,如下所示:

device = Device.new
device.add_interface("GigabitEthernet1/1", "10.5.16.1")
device.add_interface("GigabitEthernet1/2", "10.5.17.1")

template = File.read("/path/to/your/template.erb")
config = ERB.new(template).result(device.binding)
于 2008-09-17T09:51:39.013 回答