HTML以外のファイルをテンプレート化するには、ERB(Rubyのテンプレートシステム)が必要です。
(その代わり、私は、このような.javaファイルとしてソースファイルのためにそれを使用したい、.csファイル、...)コマンドラインからWebサーバーなしでRubyテンプレートファイル(ERB)を実行するにはどうすればよいですか?
どのように私は、コマンドラインから Rubyのテンプレートを "実行" のですか?
HTML以外のファイルをテンプレート化するには、ERB(Rubyのテンプレートシステム)が必要です。
(その代わり、私は、このような.javaファイルとしてソースファイルのためにそれを使用したい、.csファイル、...)コマンドラインからWebサーバーなしでRubyテンプレートファイル(ERB)を実行するにはどうすればよいですか?
どのように私は、コマンドラインから Rubyのテンプレートを "実行" のですか?
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と書いています。
ルビースクリプトを作成します。 APIドキュメントはこちらです:たとえば http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/
:
template = ERB.new File.read("path/to/template.erb"), nil, "%"
template.result(binding)
(バインディングは、テンプレートのニーズという@varsと結合されている場合。)
警告 - 一部のRubyバージョンはRails ERBのさまざまな機能をサポートしていません(空白行の終了を省略します)。 – lzap
別のオプションは、ルビーを使用することです - 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
変数を定義し、トップレベルを、使用しました。
私はこれにコメントしようとしましたが、コメントリンクは利用できません。
私はこの使用しています:上記の投稿から
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)
を
あなたはErubisにERBを切り替えることができた場合は、あなたの問題解決をするのと同じくらい簡単です:
require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
これは良い基本的な記事である - http://rrn.dk/rubys-erb-templating-system そして、もう一つ - テにしようとしているときにこの質問を見つけhttp://www.stuartellis.eu/articles/erb/
私の人形テンプレート。
<% @my_param="foo bar" %>
<% @another_param=123 %>
または(等価):あなたのfoo.erb
その新しいファイル、例えばに、すべてのテンプレート変数を入れたファイルfoo.vars.erb
を作成沿い
:
<%
@my_param="foo bar"
@another_param=123
%>
コマンドラインでこれを実行します。
cat foo.vars.erb foo.erb | erb
あなたの完全にレンダリングされたテンプレートは、現在STD-アウトをするために印刷されなければなりません。そこから手作業で出力をチェックするか、またはdiff(または他のツール)を使用して、事前レンダリングされた出力と比較することができます。
パーフェクト/ありがとう。これはまさに私が探していたユースケース(人形テスト) – JDS
素晴らしい!私は** erbを実行しようとしていましたが(それが正しいかどうかはわかりませんが)、失敗したので、直接実行することはできないと思っていましたが、代わりに外部ライブラリが必要でした。あなたの返事の後、私はカスタムRubyしかインストールされていないことを認識しました。これはシステムのパスにはありませんでした;)ありがとう! –
私はantスクリプト(すべてのプラットフォームで実行する必要があります)に必要です。私はここにLinuxの下で私はerb(拡張子なし)があることに気づいたが、あなたはerb.batを言及している(私はあなたが拡張子なしでerbを持っていない窓の下にあると仮定する)。マルチプラットフォームでerbを起動する方法を教えていただけますか? –
これは、上司のような変数を注入することができます:erb <(エコー-n '<%somevar = "yay"%>'; cat your.erb) –