ERB使用命令行创建静态html

时间:2016-01-06 21:01:39

标签: html ruby-on-rails ruby erb

我正在尝试制作一个非常基本的ERB来从多个较小的html文件制作一个html文件。我读到我可以使用

<%= h(render "filename") %>

将名为_filename.html.erb的内容文件添加到文档中。当我尝试使用

在命令行中生成文件时
erb test.html.erb > new-test.html

收到错误

test.html.erb:9:in `<main>': undefined method `render' for main:Object (NoMethodError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:849:in `eval'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:849:in `result'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:831:in `run'
    from /usr/bin/erb:133:in `run'
    from /usr/bin/erb:154:in `<main>'

我做错了什么,或者我是否需要将其作为网络应用程序来运行&#34;渲染&#34;上班?

test.html.erb代码供参考:

    <html lang="en">
     <body>

       <%= h(render "me") %>

     </body>
    </html>

1 个答案:

答案 0 :(得分:0)

这个脚本怎么样:

require 'erb'

def render(filename)
  ERB.new(File.read "#{filename}.html.erb").result(binding)
end

File.open('new-test.html', 'w') do |file|
  file.write render('test')
end

它会读取你的test.html.erb,正确插入ruby代码,包括调用我们的自定义渲染(所以不需要任何外部库来处理),并输出一个new-test.html文件。您可以通过以下方式运行它:

ruby script_name.rb

注意我们需要如何向ERB提供绑定对象。它定义了模板中插值ruby的评估上下文。这里我们提供脚本本身的绑定,这就是为什么我们可以访问erb模板中的render方法。