我们有一个缓存的html模板 - 它有占位符值。基于实际对象值,占位符正在被替换。这种方法效果很好,但有时会导致错误(无法分配内存)。
replacement_hash.keys.each do |placeholder|
value = ##some logic to get values from model using placeholder text.
text.gsub!(placeholder, value)
end
有关如何修复(提高效率)或任何其他方法的建议吗?
由于
答案 0 :(得分:1)
这是由于糟糕的用户数据 - 包含无效值的字符串 - 导致gsub无法正常工作,并且将被gsub替换的相同字符串再次插回。
代码有一个递归函数,它将继续替换,直到没有[[xxx]]字符串存在 - 这导致代码进入循环直到内存已满。
"Kiprosh [[signature]]".gsub("[[signature]]", "\0 and \0")
expected => "Kiprosh \0 and \0"
actual => "Kiprosh [[signature]] and [[signature]]"