2012-03-15 146 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