使用eruby还是erb?
时间:2020-03-05 18:56:36 来源:igfitidea点击:
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
通过嵌入式红宝石解释器(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
解决方案
回答
没关系,它们都是一样的。 erb是纯红宝石,eruby是用C编写的,因此速度要快一些。
erubis(第三个)是纯红宝石,并且比上面列出的两个都快。但我怀疑这种速度是否会成为瓶颈,因此只需使用erb。它是Ruby标准库的一部分。
回答
Eruby是一个外部可执行文件,而erb是Ruby中的一个库。如果要独立处理模板文件(例如,快速替换PHP),则使用前者;如果需要在其他Ruby脚本的上下文中处理它们,则可以使用后者。使用ERB仅仅是因为它更灵活,所以更常见,但是我承认我一直迷恋于eruby来为快速的小实用程序网站执行.rhtml
文件。
回答
我正在使用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)