簡體   English   中英

Ruby 模板縮進問題 - puppet

[英]Ruby template indentation issue - puppet

我無法修復 ruby 模板的縮進,我在這上面花了幾個小時,但仍然無法按預期工作。

這是模板:

<%= @log_path -%> {
  <%= @rotate_every %>
  rotate <%= @rotate_count %>
  compress
  <% if @delaycompress == true %>delaycompress
  <% end -%>missingok
  notifempty
  create <%= @create_mode -%> <%= @create_owner -%> <%= @create_group %>
  <% if @postrotate == true -%>postrotate
    <% @postrotate_cmd.each do |value| -%><%= value %>
  <% end -%>endscript<% end %>
}

當@postrotate 為假時,output 看起來像這樣。 }在空行之后。

/var/log/auth.log {
  weekly
  rotate 4
  compress
  delaycompress
  missingok
  notifempty
  create 0644 root adm
  
  }

當@postrotate 為真時,output 看起來像這樣。 第二個invoke commnad應該在右邊一點。

/var/log/auth.log {
  weekly
  rotate 4
  compress
  delaycompress
  missingok
  notifempty
  create 0644 root adm
  postrotate
    invoke-rc.d rsyslog reload > /dev/null
  invoke-rc.d rsyslog reload > /dev/null
  endscript
  }

當@postrotate 為假時,預期的 output:

/var/log/auth.log {
  weekly
  rotate 4
  compress
  delaycompress
  missingok
  notifempty
  create 0644 root adm
}

當@postrotate 為真時,預期的 output :

/var/log/auth.log {
  weekly
  rotate 4
  compress
  delaycompress
  missingok
  notifempty
  create 0644 root adm
  postrotate
    invoke-rc.d rsyslog reload > /dev/null
    invoke-rc.d rsyslog reload > /dev/null
  endscript
}

您似乎對-%> end-of-tag 標記的含義有錯誤的期望。 如果您使用-%>關閉標簽,並且它是模板該行上的最后一個非空格,則任何尾隨空格和其后的換行符都會被消耗,而不是被復制到 output。 但是,如果以-%>結尾的標記不是行上的最后一個非空格,這對您沒有任何幫助,這在您的模板中通常是這種情況。

您似乎也不知道<%- start-of-tag 標記,它對以該標記開頭的標記是第一個非空格的行的任何前導縮進具有類似的效果。 有幾個地方使用它可以幫助您使您的模板更易於閱讀。

總的來說,我可能會寫你的模板更像這樣:

<%= @log_path %> {
  <%= @rotate_every %>
  rotate <%= @rotate_count %>
  compress
  <%- if @delaycompress -%>
  delaycompress
  <%- end -%>
  missingok
  notifempty
  create <%= @create_mode %> <%= @create_owner %> <%= @create_group %>
  <%- if @postrotate -%>
  postrotate
    <%- @postrotate_cmd.each do |value| -%>
    <%= value %>
    <%- end -%>
  endscript
  <%- end -%>
}

特別要注意的是,除了空格和以<%-開頭並以-%>結尾的非打印標簽以外的行,根本不會產生 output。 使用它來將流控制語句與模板文本和 output 標記分開,使模板更清晰、更易於閱讀,並且還可以確保循環體始終縮進。 此外,它可能會幫助您查看並且很可能幫助您調試問題,因為您希望它離開-就像您的原始模板在其最后一個<% end %>標記中所做的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM