Что использовать, эруби или эрб?

В чем разница между 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

person Brent Chapman    schedule 16.09.2008    source источник


Ответы (3)


Неважно, они оба одинаковые. erb — это чистый рубин, eruby написан на C, поэтому он немного быстрее.

erubis (третий) — чистый рубин и быстрее, чем оба перечисленных выше. Но я сомневаюсь, что скорость является узким местом для вас, поэтому просто используйте erb. Это часть стандартной библиотеки Ruby.

person Jordi Bunster    schedule 16.09.2008

Eruby — это внешний исполняемый файл, а erb — библиотека внутри Ruby. Вы бы использовали первый, если вам нужна независимая обработка ваших файлов шаблонов (например, быстрая и грязная замена PHP), а второй, если вам нужно обработать их в контексте какого-либо другого скрипта Ruby. Чаще используется ERB просто потому, что он более гибкий, но я признаю, что был виновен в том, что баловался eruby для выполнения .rhtml файлов для быстрых небольших служебных веб-сайтов.

person Daniel Spiewak    schedule 16.09.2008

Я делаю что-то подобное, используя erb, и производительность меня устраивает.

Однако, как сказал Джорди, это зависит от того, в каком контексте вы хотите это запустить - если вы буквально собираетесь использовать шаблоны, подобные тому, который вы указали, 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)
person Jon Wood    schedule 17.09.2008