使用哪个,eruby还是erb?

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
3个回答

9

其实没什么区别,两者都是一样的。erb是纯ruby编写的,eruby则是用C语言编写的,所以速度会稍微快一些。

还有一个名为erubis的第三种模板引擎,它也是纯ruby编写的,并且比上述两个都要快。但我怀疑速度并不是你遇到的瓶颈,所以建议使用erb。它是Ruby标准库的一部分。


2

Eruby是一个外部可执行文件,而erb是Ruby内部的库。如果你想要独立处理模板文件(例如快速粗糙的PHP替代),则应该使用前者;如果你需要在其他Ruby脚本的上下文中处理它们,则应该使用后者。通常更常用ERB,因为它更灵活,但我承认我有时会使用eruby来执行.rhtml文件,用于快速创建一些小型实用网站。


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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接