How do I execute ruby template files (ERB) without a web server from command line? How do I execute ruby template files (ERB) without a web server from command line? ruby ruby

How do I execute ruby template files (ERB) without a web server from command line?


You should have everything you need in your ruby/bin directory. On my (WinXP, Ruby 1.8.6) system, I have 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 "%"

so erb your_erb_file.erb should write the result to STDOUT.

(EDIT: windows has erb.bat and just plain "erb". The .bat file is just a wrapper for erb, which I guess should make the same command work pretty much the same on any OS)

See the prag prog book discussion (starts about half-way down the page).

Note also that Jack Herrington wrote a whole book about code generation that uses Ruby/ERB.


Write a ruby script that does it. The API documentation is here:http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

For example:

template = ERB.new File.read("path/to/template.erb"), nil, "%"template.result(binding)

(Where binding is a binding with the @vars that the template needs.)


Another option would be to use ruby -e, since ERB itslef is so simple.

Something like:

ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result"

However, I assume you have a context you want to render the template in. How are you expecting to get that context? As an example, check out:

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

which will print out "hello world", using the top-level, where you defined the hello variable, as the binding.