关于红宝石:使用哪个,ruby或erb?

关于红宝石:使用哪个,ruby或erb?

Which to use, eruby or erb?

eruby和erb有什么区别? 有什么考虑因素会促使我选择其中一个?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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]}\
"

    r <<"    ip address #{tuple[1]} netmask 255.255.255.0\
"

}
r.chomp
%>
logging 10.5.16.26

通过嵌入式红宝石解释器(erb或eruby)运行时,将产生以下输出:

1
2
3
4
5
6
7
8
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

没关系,它们都是一样的。 erb是纯红宝石,eruby用C编写,因此速度更快。

erubis(第三个)是纯红宝石,比上面列出的两个都快。但是我怀疑这种速度是否会成为您的瓶颈,因此只需使用erb。它是Ruby标准库的一部分。


Eruby是一个外部可执行文件,而erb是Ruby中的一个库。如果要独立处理模板文件(例如,快速替换PHP),则可以使用前者;如果需要在其他Ruby脚本的上下文中处理它们,则可以使用后者。使用ERB只是因为它更灵活,所以更常见,但是我承认我一直为尝试快速实用工具网站而执行exby来执行.rhtml文件而感到内gui。


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

正如Jordi所说,这取决于您要在哪个上下文中运行-如果您确实要使用列出的模板,那么eruby可能会更好,但是我想您实际上会通过模板的变量,在这种情况下需要erb。

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

1
2
3
4
5
6
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)


推荐阅读