2012-03-15 199 views
0

我有一個rake文件,對某些文本文件執行查找和替換操作。當我在終端輸入:Rake任務失火

rake rename:changename[Funk] 

我想耙文件來改變術語Framework的每一個實例Funk。問題是代碼當前將Framework更改爲new_name

關於我在做什麼錯的任何想法?

namespace :rename do  
    desc 'changes the name of the app' 
    task :changename, :new_name do 
    file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] 
    file_names.each do |file_name| 
     text = File.read(file_name) 
     File.open(file_name, "w") { |file| file << text.gsub("Framework", :new_name.to_s) } 
    end 
    end 
end 

回答

3

的問題是,你實際上傳遞"new_name"每一次gsub。這是因爲:new_name.to_s只是返回:new_name符號的字符串表示形式。

您已經允許用戶傳遞參數給你的任務:

task :change_name, :new_name 
    # ... 
end 

但是,你實際上並沒有接收參數數組,這是順水推舟給予task方法作爲第二塊形式參數:

task :change_name, :new_name do |task, args| 
    args.with_defaults new_name: 'Funk' 
    # ... 
end 

在手的參數,所有你需要做的是檢索新的名稱:

file << text.gsub 'Framework', args[:new_name] 
+1

太棒了!現在完美運作。謝謝! – 2012-03-15 17:44:33