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) |