我正在执行一项更改某些页面的元标记的 rake 任务。这些标签在控制器中定义。rake 任务旨在打开控制器文件,找到其中包含短语“@meta_tag”的任何行,然后根据 replace_line(line) 方法重写该行。当我运行 rake 任务时,我没有收到任何错误,但它也没有进行任何更改。
我认为我的问题出在 'r+' 行。我需要在一行中打开文件并在另一行代码中写入吗?
require 'rake'
namespace :meta_tags do
desc 'changes the meta tags'
task :update => :environment do
regex = /@meta_tag/
found = false
file = File.open('app/controllers/site_controller.rb', 'r+')
file.each_line do |line|
replace_line(line) if(found)
found = true if(line =~ regex)
end
end
def replace_line(line)
meta_tags = MetaTag.all.map { |tag| tag["tag"] }
new_tag = meta_tags.sample(1)[0]
line = "@meta_tag = #{new_tag}"
end
end
如果你看到我做错了什么,请告诉我。