2009-06-11 17 views
37

HTML以外のファイルをテンプレート化するには、ERB(Rubyのテンプレートシステム)が必要です。
(その代わり、私は、このような.javaファイルとしてソースファイルのためにそれを使用したい、.csファイル、...)コマンドラインからWebサーバーなしでRubyテンプレートファイル(ERB)を実行するにはどうすればよいですか?

どのように私は、コマンドラインから Rubyのテンプレートを "実行" のですか?

答えて

25

ruby​​/binディレクトリに必要なものがすべてあるはずです。私(WinXPの、ルビー1.8.6)システムでは、私はそうerb your_erb_file.erbがSTDOUTに結果を書き込む必要があり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 "%" 

を持っています。

(EDIT:Windowsはerb.batを持っており、単なる「ERB」の.batファイルは、私はほとんど同じ任意のOS上で同じコマンドを動作させる必要がありますねERBのための単なるラッパー、である。)

prag prog bookのディスカッションを参照してください(ページの途中から開始)。

また、Jack HerringtonはRuby/ERBを使用するコード生成についてa whole bookと書いています。

+1

素晴らしい!私は** erbを実行しようとしていましたが(それが正しいかどうかはわかりませんが)、失敗したので、直接実行することはできないと思っていましたが、代わりに外部ライブラリが必要でした。あなたの返事の後、私はカスタムRubyしかインストールされていないことを認識しました。これはシステムのパスにはありませんでした;)ありがとう! –

+0

私はantスクリプト(すべてのプラットフォームで実行する必要があります)に必要です。私はここにLinuxの下で私はerb(拡張子なし)があることに気づいたが、あなたはerb.batを言及している(私はあなたが拡張子なしでerbを持っていない窓の下にあると仮定する)。マルチプラットフォームでerbを起動する方法を教えていただけますか? –

+0

これは、上司のような変数を注入することができます:erb <(エコー-n '<%somevar = "yay"%>'; cat your.erb) –

23

ルビースクリプトを作成します。 APIドキュメントはこちらです:たとえば http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

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

(バインディングは、テンプレートのニーズという@varsと結合されている場合。)

+0

警告 - 一部のRubyバージョンはRails ERBのさまざまな機能をサポートしていません(空白行の終了を省略します)。 – lzap

14

別のオプションは、ルビーを使用することです - ERB itslefはとてもシンプルなので、e。

何かのように:。しかし

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変数を定義し、トップレベルを、使用しました。

0

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

私はこの使用しています:上記の投稿から

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

私はのようなDOSのバッチファイルを作成しています:

と私はそれが問題になるかもしれないと思うものを見つけ
%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) 
12

あなたはErubisにERBを切り替えることができた場合は、あなたの問題解決をするのと同じくらい簡単です:

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

私の人形テンプレート。

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

または(等価):あなたのfoo.erbその新しいファイル、例えばに、すべてのテンプレート変数を入れたファイルfoo.vars.erb

  • を作成沿い

    1. :このソリューションで終わった

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

      cat foo.vars.erb foo.erb | erb 
      

    あなたの完全にレンダリングされたテンプレートは、現在STD-アウトをするために印刷されなければなりません。そこから手作業で出力をチェックするか、またはdiff(または他のツール)を使用して、事前レンダリングされた出力と比較することができます。

  • +0

    パーフェクト/ありがとう。これはまさに私が探していたユースケース(人形テスト) – JDS