Что использовать, Eruby или Erb? - PullRequest
4 голосов
/ 16 сентября 2008

Какая разница между 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 голосов
/ 16 сентября 2008

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

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

2 голосов
/ 16 сентября 2008

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

0 голосов
/ 17 сентября 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)
...