Как выполнить файлы шаблонов ruby (ERB) без веб-сервера из командной строки?
Мне нужно ERB (система шаблонов Ruby) для шаблонов файлов, отличных от HTML.
(вместо этого, я хочу использовать его для исходных файлов, таких как .ява. ,цезий. ,..)
Как "выполнить" шаблоны Ruby из командной строки?
7 ответов
У вас должно быть все, что вам нужно в каталоге ruby/bin. В моей системе (WinXP, Ruby 1.8.6) у меня есть ruby/bin/erb.bat
erb.bat [switches] [inputfile]
-x print ruby script
-n print ruby script with line number
-v enable verbose mode
-d set $DEBUG to true
-r [library] load a library
-K [kcode] specify KANJI code-set
-S [safe_level] set $SAFE (0..4)
-T [trim_mode] specify trim_mode (0..2, -)
-P ignore lines which start with "%"
так erb your_erb_file.erb
следует записать результат в STDOUT.
(EDIT: windows имеет erb.летучая мышь и просто "Эрб". Этот.bat-файл - это просто оболочка для erb, которая, я думаю, должна заставить ту же команду работать почти одинаково на любой ОС)
посмотреть prag prog книга дискуссии (начинается примерно на полпути вниз страница.)
Обратите также внимание, что Джек Херрингтон написал книги о генерации кода, который использует Ruby / ERB.
напишите скрипт ruby, который это делает. Документация по API здесь: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/
например:
template = ERB.new File.read("path/to/template.erb"), nil, "%"
template.result(binding)
(где привязка-это привязка с @vars, которая нужна шаблону.)
другой вариант-использовать ruby-e, так как ERB itslef настолько прост.
что-то типа:
ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result"
однако я предполагаю, что у вас есть контекст, в котором вы хотите отобразить шаблон. Как вы ожидаете получить этот контекст? В качестве примера, проверьте:
ruby -rerb -e "hello = 'hello'; puts ERB.new('<%= hello %> world').result(binding)"
который распечатает "hello world", используя верхний уровень, где вы определили hello
переменная, как привязка.
Если вы можете переключить ERB на Erubis, ваше решение проблемы так же просто, как:
require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
нашел этот вопрос при попытке проверить мои шаблоны кукол.
закончилось этим решением:
- вдоль
foo.erb
создайте файлfoo.vars.erb
-
Поместите все переменные шаблона в этот новый файл, например:
<% @my_param="foo bar" %> <% @another_param=123 %>
или (эквивалент):
<% @my_param="foo bar" @another_param=123 %>
-
в командной строке выполнить следующее:
cat foo.vars.erb foo.erb | erb
теперь ваш полностью визуализированный шаблон должен быть напечатан в std-out. Оттуда вы проверяете вывод вручную, или вы можете взять diff (или другие инструменты), чтобы сравнить его с предварительно отображаемым выводом.
Это хорошая основная статья -http://rrn.dk/rubys-erb-templating-system И еще один - http://www.stuartellis.eu/articles/erb/
Я попытался прокомментировать это, но ссылка на комментарии недоступна.
Я использую этот:
template = ERB.new File.new("path/to/template.erb").read, nil, "%"
template.result(binding)
из публикации выше: и я нашел, что я думаю, что это может быть проблемой:
Я создаю пакетные файлы DOS, такие как:
%JAVA_HOME%\bin\jar -xvf <%=inputfile%>...
и я нашел странную проблему - я получаю это, когда я запускаю с кодом выше:
Processing Template test.txt
erb):2:in `render': compile error (SyntaxError)
erb):2: syntax error, unexpected tSTRING_BEG, expecting $end
erbout.concat "\n"
^
from DBUser.rb:49:in `render'
from DBUser.rb:43:in `each'
from DBUser.rb:43:in `render'
from DBUser.rb:81
я попробовал следующее и обошел мою конкретную проблему - не уверен, что это правильный ответ для всех ...
template = ERB.new File.new("path/to/template.erb").read
template.result(binding)