【问题标题】:Heroku Error R14 (Memory quota exceeded) when run Prawn::Document.image运行 Prawn::Document.image 时出现 Heroku 错误 R14(超出内存配额)
【发布时间】:2013-08-17 11:33:34
【问题描述】:

我的 Rails 应用程序中只有一个请求出现 Heroku R14 错误。

我在本地复制生产环境并查看同一页面,没有错误。

在对 heroku 日志进行调试之后。我发现在这个请求之后内存增加得更快。这是内存日志。

2013-08-15T08:28:45.104572+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 measure=memory_total val=113.04 units=MB

2013-08-15T08:29:01.486530+00:00 app[web.1]:在 2013-08-15 08:29:01 +0000 开始为 111.174.65.157 获取“/issues/98/preview”

2013-08-15T08:29:01.486530+00:00 app[web.1]:在 2013-08-15 08:29:01 +0000 开始为 111.174.65.157 获取“/issues/98/preview”

2013-08-15T08:29:07.330011+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 measure=memory_total val=220.39 units=MB

2013-08-15T08:29:29.712928+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 measure=memory_total val=511.97 units=MB

我检查了几次日志,似乎heroku创建了一个新的rails实例来处理reqesut,过了一会儿,重新创建了一个新的rails实例,直到它超过了内存限制。

我发现有两个请求日志。在我的本地生产环境中,每个请求都有两个日志。而且我还调试了预览操作,它只调用了一次。而且在开发中,不存在这样的日志问题。所以我认为生产环境中应该有一些日志配置错误。但这应该与heroku内存问题无关。

预览请求调用 Prawn::Document 对象上的图像渲染方法

require 'open-uri'
...
# the context is an instance of Prawn:Document
unless image_path.nil?
  f = open(image_path)
  image f, fit: [400, 400]
end    

我很确定错误发生在图像行上。如果我删除图像行,则预览请求有效。该页面将显示没有图像的pdf。如果我离开它,那么页面将被阻塞并最终超出内存。

我调试了一天,没有更多的想法。

大虾版本是0.12.0

我的 Rails 版本是 4.0

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails heroku prawn


    【解决方案1】:

    与我的团队讨论后,我知道了原因。

    图片尺寸为1920*1080,heroku上的Prawn::Document.image似乎无法解决这样的图片。一个 400*400 的作品。

    但不知道为什么一张 27k png 的图片会吃掉 400M heroku 内存。

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 1970-01-01
      • 2016-12-10
      • 2023-03-28
      • 2013-10-01
      • 2020-11-23
      • 2017-11-02
      • 2014-07-14
      • 2012-11-02
      相关资源
      最近更新 更多