2013-08-13 3 views
3

나는 다음과 같은 인형 템플릿 파일 solr.json.erb 있습니다는 매개 변수

{ 
    "servers" : [ { 
    "port" : "<%= jmx_port %>", 
    "host" : "localhost", 

    "queries" : [ 
     <% @markets.each do |market| -%> 
    { 
     "outputWriters" : [ { 
     "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter", 
     } ], 
     "obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio"] 
    }, 
    <% end -%> 
    ], 
    "numQueryThreads" : 2 
    } ] 
} 

을 나는 일부 템플릿을 적용한 결과를 테스트하려면 꼭두각시에서 이것을 실행하기 전에 테스트 매개 변수.

어떻게하면됩니까?

전에, 나는 my_script.ruby

require 'erb' 
require 'ostruct' 
namespace = OpenStruct.new(:jmx_port => 9200, :markets=> ['CH', 'FR']) 
template = File.open("solr.json.erb", "rb").read; 
puts ERB.new(template).result(namespace.instance_eval { binding }) 

,이 같은 스크립트를 시도했지만 OpenStruct이 instance variables이 없기 때문에 그것은 작동하지 않았다, 그래서 나는 @markets을 사용할 수 없습니다. http://docs.puppetlabs.com/guides/templating.html

erb -P -x -T '-' mytemplate.erb | ruby -c 

을하지만 내가 요구하고있는 무슨이 아니다 :

문서는이 명령 구문을 확인할 수 있음을 언급하고있다. 일부 테스트 매개 변수 (jmx_port = 9200, markets = [ 'CH', 'FR'])를 템플릿에 적용한 결과를 묻습니다.

어떻게하면됩니까?

답변

5

openstruct 물건이 필요 없다고 생각합니다. 이것은 나를 위해 작동 : 나는 템플릿 일부를 변경해야 않았지만

require 'erb' 
#Test Variables 
jmx_port = 9200 
@markets = ['CH', 'FR'] 

temp = File.open("testerb.erb", "rb").read; 
renderer = ERB.new(temp) 
puts output = renderer.result() 

가 :

난 당신이 템플릿에 있던 -%>에서 -을 제거했습니다. 다음은 그들이 당신이 ERB에 대한 트림 모드를 설정하면, 당신은 제거 할 필요는 없습니다 <%=

{ 
    "servers" : [ { 
    "port" : "<%= jmx_port %>", 
    "host" : "localhost", 

    "queries" : [ 
     <% @markets.each do |market| %> 
    { 
     "outputWriters" : [ { 
     "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter", 
     } ], 
     "obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio"] 
    }, 
    <% end %> 
    ], 
    "numQueryThreads" : 2 
    } ] 
} 
+0

마일, 아래에서 Chris의 제안을 테스트하고 통합 할 수 있습니까? – DomQ

4

와 결합 될 거 야으로, 컴파일에서 그것을 방지 - 템플릿에서 "%>를"

renderer = ERB.new(temp, nil, '-')