2016-12-19 72 views
0

廚師新手在這裏,也知道一些紅寶石。紅寶石廚師食譜中的多個文件替換

我不知道爲什麼我不能在我正在處理的示例配方中的文件中寫入兩次。

我在我的配置文件中有兩個模式需要替換,但是這樣做 不會更新這兩個模式;只有一個更新,而不是另一個。

ruby_block " Update Config File " do 
    block do 
    file_name = config_file 
    text = File.read(file_name) 
    File.write(file_name, text.gsub(search_value, replace_value)) 
    File.write(file_name, text.gsub(second_search_value, second_replace_value)) 
    end 
    only_if { File.exists?("#{config_file}") } 
end 

我知道我可以做另一個ruby_block,但我只是想知道我錯過了什麼使這項工作。由於我正在編輯同一個文件,因此我只需要一個ruby_block而不是兩個。

回答

2

讓我們通過線看看行:

  1. text = File.read(file_name)

容易,我們**讀*文件內容到text

  • File.write(file_name, text.gsub(search_value, replace_value))
  • 我們做一個g葉形sub stitution在原始text,並將其寫入到文件

  • File.write(file_name, text.gsub(second_search_value, second_replace_value))
  • 我們做在原始text一個g葉形sub stitution並將其寫入到文件中

    ,當然你會覆蓋變化2.當你在3

    一種可能的方式寫將GSUB兩次,只寫一旦結束,但真的不這樣做,做這種變化是脆弱的,並隨時可能中斷或在每次運行中插入更改並破壞配置。
    讓廚師使用template

    +1

    管理整個文件只是爲了回顯底部部分,使用模板資源確實更好,因爲這是一種更趨於收斂的方法。正如你的例子所表明的那樣,如果你的regexps沒有被仔細地編寫,你會冒着意想不到的替代。 – coderanger