Ruby gsub, NoMemoryError: failed to allocate memory.

Ruby gsub, NoMemoryError: failed to allocate memory.

我们缓存了一个 html 模板 - 它具有占位符值。基于真实的对象值,占位符正在被替换。这大部分工作正常,但有时会导致错误(无法分配内存)。

    replacement_hash.keys.each do |placeholder|
      value = ##some logic to get values from model using placeholder text.
      text.gsub!(placeholder, value)
    end

关于如何解决这个问题(提高效率)或任何替代方法有什么建议吗?

谢谢

这是由于错误的用户数据 - 包含无效值的字符串 - 导致 gsub 无法正常工作,并且将被 gsub 替换的相同字符串再次插入。

并且代码有一个递归函数,它将继续替换内容,直到不存在带有 [[xxx]] 的字符串 - 这导致代码进入循环,直到内存已满。

"Kiprosh [[signature]]".gsub("[[signature]]", "[=10=] and [=10=]")
expected =>  "Kiprosh [=10=] and [=10=]"
actual   => "Kiprosh [[signature]] and [[signature]]"