耙任务失火

时间:2012-03-15 15:37:10

标签: ruby-on-rails ruby rake

我有一个rake文件,可以对某些文本文件执行查找和替换操作。当我在终端输入时:

rake rename:changename[Funk]

我希望rake文件将术语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

1 个答案:

答案 0 :(得分: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]