web-dev-qa-db-ja.com

コマンドラインからWebサーバーなしでRubyテンプレートファイル(ERB)を実行するにはどうすればよいですか?

非HTMLファイルのテンプレート化に[〜#〜] erb [〜#〜](Rubyのテンプレートシステム)が必要です。
(代わりに、.Java、.cs、...などのソースファイルに使用したい)

"execute" 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の単なるラッパーであり、同じコマンドがどのOSでもほぼ同じように動作するはずです)

prag prog book の議論を参照してください(ページの半分ほど下から始まります)。

また、Jack HerringtonがRuby-/ERBを使用したコード生成について 本全体 を書いたことにも注意してください。

25
Mike Woodhouse

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とのバインディングです。)

24
Sam

別のオプションは、Ruby -eを使用することです。これは、ERB itslefが非常に単純であるためです。

何かのようなもの:

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変数を定義したトップレベルを使用して、「hello world」を出力します。

14
Yehuda Katz

ERBをErubisに切り替えることができる場合、問題解決は次のように簡単です。

require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
13
morgoth

Puppetテンプレートをテストしようとしたときにこの質問を見つけました。

このソリューションで終了しました:

  1. foo.erbファイルを作成するfoo.vars.erb
  2. すべてのテンプレート変数をその新しいファイルに入れます、例えば:

    <% @my_param="foo bar" %>
    <% @another_param=123 %>
    

    または(同等):

    <%
    @my_param="foo bar"
    @another_param=123
    %>
    
  3. コマンドラインでこれを実行します:

    cat foo.vars.erb foo.erb | erb
    

これで、完全にレンダリングされたテンプレートが標準出力に印刷されます。そこから出力を手動で確認するか、diff(または他のツール)を使用して、事前にレンダリングされた出力と比較できます。

4

これは良い基本的な記事です- http://rrn.dk/rubys-erb-templating-system そしてもう1つ- http://www.stuartellis.eu/articles/erb/

1
Ninad

これについてコメントしようとしましたが、コメントリンクは利用できません。

私はこれを使用しています:

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

上記の投稿から:そして、私はそれが問題であると思うものを見つけました:

次のようなDOS 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)
0
monojohnny