运行Prawn :: Document.image时,Heroku错误R14(超出内存配额)

时间:2013-08-15 09:33:56

标签: ruby-on-rails heroku prawn

我的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]:开始GET" / issues / 98 / preview"对于111.174.65.157 at 2013-08-15 08:29:01 +0000

     

2013-08-15T08:29:01.486530 + 00:00 app [web.1]:开始GET" / issues / 98 / preview"对于111.174.65.157 at 2013-08-15 08:29:01 +0000

     

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

在与我的团队讨论后,我明白了。

图像尺寸为1920 * 1080,似乎无法在heroku上使用Prawn :: Document.image解决此类图像。一个400 * 400的作品。

但不知道为什么一个27k的png图像会占用400M的Heroku内存。