Ruby ERB扩展的仿真-%>;为了单元测试的目的

Ruby ERB扩展的仿真-%>;为了单元测试的目的,ruby,rake,chef-infra,erb,Ruby,Rake,Chef Infra,Erb,我需要评估ERB模板,然后确保它是有效的NGINX配置文件,但是香草ERB不允许-%>指令。我如何才能将该扩展添加到我的rakefile中 我已经能够在irb中复制问题,因此: ~ $ irb irb(main):001:0> require 'erb' => true irb(main):002:0> var = "yeah" => "yeah" irb(main):003:0> ERB.new(" <% if var == 'yeh' -%> irb

我需要评估ERB模板,然后确保它是有效的NGINX配置文件,但是香草ERB不允许
-%>
指令。我如何才能将该扩展添加到我的rakefile中

我已经能够在
irb
中复制问题,因此:

~ $ irb
irb(main):001:0> require 'erb'
=> true
irb(main):002:0> var = "yeah"
=> "yeah"
irb(main):003:0> ERB.new(" <% if var == 'yeh' -%>
irb(main):004:1"    something
irb(main):005:1"    <% else -%>
irb(main):006:1"    something else
irb(main):007:1"    <% end -%>
irb(main):008:1" ").result binding #"
SyntaxError: (erb):1: syntax error, unexpected ';'
...concat " ";  if var == 'yeh' -; _erbout.concat "\nsomething\...
...                               ^
(erb):3: syntax error, unexpected keyword_else, expecting $end
;  else -; _erbout.concat "\nsomething else\n"
       ^
    from /usr/lib/ruby/1.9.1/erb.rb:838:in `eval'
    from /usr/lib/ruby/1.9.1/erb.rb:838:in `result'
    from (irb):3
    from /usr/bin/irb:12:in `<main>'
~$irb
irb(主):001:0>要求“erb”
=>正确
irb(主要):002:0>var=“是”
=>“是的”
irb(主要):003:0>雇员再培训局新(“
irb(主要):004:1“什么
irb(主要):005:1“
irb(主要):006:1“其他内容
irb(主要):007:1“
irb(主):008:1“。结果绑定#”
语法错误:(erb):1:语法错误,意外“;”
…concat“”;如果var=='yeh'-_erbout.concat“\n某些内容\。。。
...                               ^
(erb):3:语法错误,意外的关键字\u else,应为$end
;else-;erbout.concat“\n其他内容\n”
^
from/usr/lib/ruby/1.9.1/erb.rb:838:in'eval'
from/usr/lib/ruby/1.9.1/erb.rb:838:in'result'
来自(irb):3
from/usr/bin/irb:12:in`'

为了在ERB中使用
-%>
语法,您需要设置。这是构造函数的第三个选项,您需要将
nil
作为第二个选项传递(除非您想将
安全级别
更改为默认值):

ERB.new(“
某物
别的
,nil,“-”)。结果绑定
如果没有此选项,
-
将包含在生成的Ruby脚本中,并在尝试运行它时给出语法错误


请注意,还有另一个eRuby处理器,它可能有稍微不同的选项(可以)。Rails使用这一个。有关更多信息,请查看文档。

要在ERB中使用
-%>
语法,需要设置。这是构造函数的第三个选项,需要将
nil作为第二个选项传递(除非您想更改默认值的
安全级别
):

ERB.new(“
某物
别的
,nil,“-”)。结果绑定
如果没有此选项,
-
将包含在生成的Ruby脚本中,并在尝试运行它时给出语法错误


请注意,还有另一个eRuby处理器,它可能有稍微不同的选项(它可以)。这是Rails使用的。有关更多信息,请查看文档。

Heh。感谢您提供的澄清。显然,它现在在标准ERB中。这很有趣。@DaveNewton查看文档,它似乎是在Ruby 2.0中添加的。我猜来自Rails的人期待它,所以它被添加了。这很有意义。我不认为它以前在ERB中,但是有真实的事实是很好的。@DaveNewton它看起来就像是2.0中添加的文档:,修剪选项可以追溯到更早的1.8版本。我想:哦,我不知道——我想我最初的记忆要么是错误的,要么是来自一个非常旧的版本。嘿。谢谢你提供的澄清。显然,它现在是在标准ERB中。这很有趣。@DaveNe看看这些文档,它似乎是在Ruby 2.0中添加的。我猜Rails的人都期待它,所以它被添加了。这是有道理的。我不认为它以前在ERB中是正确的,但有实际的事实是很好的。@DaveNewton它看起来就像是在2.0中添加的文档:,修剪选项甚至更早,到1.8我想:哦,我没有ide我认为我最初的记忆要么是错误的,要么是来自一个相当旧的版本。
ERB.new(" <% if var == 'yeh' %>
    something
    <% else %>
    something else
    <% end %>
 ", nil, '-').result binding