2011-12-03 6 views
0

ERBシステムでIronRubyを使用して、.erb形式のファイルを解析し、出力を取得したいと考えています。 RubyでIronRubyエンジンでERBを使用する

これは次のようになります:

require "erb" 
erbContent = "..." 
return ERB.new(erbContent,0,"%<>").result 

しかし、私のIronRubyのプロジェクトにこのちょうどdoesntの仕事。私はerbファイルが欠けていることについての例外を受け取ります...だから、これはライブラリの問題だと思います。私は同様の問題があったが、私はスコープを介してローカル変数としてスクリプトに文字列を提供していた

allocator undefined for System::String 

答えて

2

:私はその後、その後、別の例外がスローされます私のIronRubyのディレクトリへのパスと私のRubyのエンジンを、開始しました。 ローカル変数は.NET CLR文字列でした。これが問題の原因です(please see here)。

解決策は、to_sを使用してERB.newに渡された文字列をRuby文字列に変換することでした。

require 'erb' 

template = ERB.new(template_code.to_s) 
template.result(binding) 

C#その上のスクリプトが呼び出さ:ここ

は、例えば(Rubyのスニペット)です上記のC#スニペットで

var scriptEngine = Ruby.CreateEngine(); 
var templateCode = "my ERB template code goes here"; 
// Pass the template code to the Ruby script through a scope 
var scope = _scriptEngine.CreateScope(new Dictionary<string, object>() 
                { 
                {"template_code", templateCode} 
                }); 

var result scriptEngine.Execute(_boostrapScript, scope).ToString(); 

を_bootstrapScriptは、Rubyスニペットを含む文字列であります上記。