2012-11-01 19 views
2

我只在定義了index時才試圖創建循環。但它看起來像 erb無法處理if子句中的循環。僅當變量在模板中定義時,Puppet 3循環纔會執行

<% if(@index) %> 
index <% index_files.each do |i| %> <%= i %> <% end %>; 
<% end %> 

預期結果是: index index.html index.php""

語法錯誤,我得到:

我平的做法未能如預期:

<% if(@index_files) %> try_files <% end %> <% index_files.each do |i| %> <%= i %> <% end %> 

我定義index_filesundef = >打破了每個循環 我定義了一個空數組=>,因爲定義了一個空數組是無效的。

也許我可以檢查index_files的長度嗎? 或者我需要一種完全不同的方式來解決問題?

+0

我很抱歉,但是這並不完全清楚。你可以重新編輯這個,以便準確清楚錯誤信息是什麼?順便說一句,erb *可以*處理if塊中的循環。 – itsbruce

回答

-1

乍一看,你只需要改變

index_files.each 

@index_files.each 
+0

不,你是否熟悉木偶? ** @ **是一個測試,看看變量是否存在。 – itsbruce

+1

但這不是Puppet ......在Puppet目錄中,模板都是erb。這是一個erb模板,它是Puppet中直接使用Ruby的地方,實際上在模板中根本沒有使用Puppet語言語法。他們有他們正在生成的文件的語法,以及控制語法的純Ruby。 – DigitalRoss

+0

@itsbruce:在Puppet ERB模板中,*建議在變量前使用'@'以確保您不會調用Ruby函數。 –

0

我做相同的,它爲我,也爲nginx的)。

例如:<% if @proxy_ignore_headers %> proxy_ignore_headers<% proxy_ignore_headers.each do |i| -%> <%= i %><% end -%>;

這就像一個魅力,你唯一的區別是使用()的if條件,但我敢打賭,木偶支持()。這很奇怪,也許你已經按下了一個不好的組合來產生一個無法看到的字符,但它與你的代碼混淆了,爲了以防萬一,請嘗試從頭開始寫所有的字符。

You can see the full template here

好運