如何在没有命令行的Web服务器的情况下执行ruby模板文件(ERB)?

iva*_*off 37 ruby code-generation template-engine erb

我需要ERB(Ruby的模板系统)来模板化非HTML文件.
(相反,我想将它用于源文件,如.java,.cs,...)

如何从命令行"执行" Ruby模板?

Mik*_*use 25

你应该在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 "%"
Run Code Online (Sandbox Code Playgroud)

所以erb your_erb_file.erb应该把结果写到STDOUT.

(编辑:windows有erb.bat,只是简单的"erb".bat文件只是erb的包装器,我想在任何操作系统上都应该使相同的命令工作几乎相同)

请参阅prag prog book讨论(从页面的中间开始).

另请注意,Jack Herrington编写了一本关于使用Ruby/ERB的代码生成的.


Sam*_*Sam 24

写一个执行它的ruby脚本.API文档在这里:http: //www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

例如:

template = ERB.new File.read("path/to/template.erb"), nil, "%"
template.result(binding)
Run Code Online (Sandbox Code Playgroud)

(其中绑定是与模板所需的@vars的绑定.)


Yeh*_*atz 14

另一种选择是使用ruby -e,因为ERB itslef非常简单.

就像是:

ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result"
Run Code Online (Sandbox Code Playgroud)

但是,我假设你有一个你想要渲染模板的上下文.你期望得到那个上下文?例如,请查看:

ruby -rerb -e "hello = 'hello'; puts ERB.new('<%= hello %> world').result(binding)"
Run Code Online (Sandbox Code Playgroud)

这将打印出"hello world",使用您定义hello变量的顶级作为绑定.


mor*_*oth 13

如果你可以将ERB切换到Erubis,你的问题解决就像这样简单:

require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
Run Code Online (Sandbox Code Playgroud)


Hub*_*iak 5

在尝试测试我的 Puppet 模板时发现了这个问题。

以这个解决方案结束:

  1. 随着你foo.erb创建一个文件foo.vars.erb
  2. 将所有模板变量放入该新文件中,例如:

    <% @my_param="foo bar" %>
    <% @another_param=123 %>
    
    Run Code Online (Sandbox Code Playgroud)

    或同等学历):

    <%
    @my_param="foo bar"
    @another_param=123
    %>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在命令行上运行:

    cat foo.vars.erb foo.erb | erb
    
    Run Code Online (Sandbox Code Playgroud)

您的完全渲染模板现在应该打印到标准输出。从那里您可以手动检查输出,或者您可以使用 diff(或其他工具)将其与预渲染的输出进行比较。