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]]"
我们缓存了一个 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]]"