如何从命令行执行没有Web服务器的ruby模板文件(ERB)?
我需要ERB (Ruby的模板系统)模板非HTML文件。
(而是,我想使用它的源文件,如.java,.cs,…)
如何从命令行“执行” Ruby模板?
你应该在你的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。
(编辑:Windows有erb.bat,只是简单的“erb”。该.bat文件只是erb的包装,我想应该使任何操作系统上的相同的命令工作几乎相同)
请参阅prag编书讨论(从页面中途开始)。
还要注意,Jack Herrington写了一本关于使用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绑定的。)
另一个select是使用ruby-e,因为ERB其它的很简单。
就像是:
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
variables作为绑定。
如果您可以将ERB切换到Erubis,您的问题解决如下简单:
require 'erubis' template = File.read("sample_file.erb") template = Erubis::Eruby.new(template) template.result(:your_variable => "sample")
试图testing我的Puppet模板时发现这个问题。
结束这个解决scheme:
- 沿着你的
foo.erb
创build一个文件foo.vars.erb
-
把所有的模板variables放到这个新文件中,例如:
<% @my_param="foo bar" %> <% @another_param=123 %>
或同等学历):
<% @my_param="foo bar" @another_param=123 %>
-
在命令行上运行这个:
cat foo.vars.erb foo.erb | erb
现在您的完全呈现的模板应该打印到标准输出。 从那里你手动检查输出,或者你可以把差异(或其他工具)与预渲染的输出进行比较。
这是一个很好的基础文章 – 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)
从上面的post:我发现我认为这可能是一个问题:
我正在创buildDOS BATCH文件,如:
%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)