我需要从我的rails app中的html转换包含页眉和页脚的PDF。这给我留下了wkhtmltopdf(如果还有其他选择,请告诉我!)对于较小的PDF,此解决方案运行良好 - 但更大的PDF成为问题。我现在使用delayed_job工作者在后台运行一个业余爱好者dyno的转换 - 这需要一段时间,但有时候工作....对于较大的PDF(或那些包含大量图像的PDF),我从未得到过结果。深入研究工人的日志,我看到以下内容:
2017-05-05T03:36:18.164514+00:00 heroku[worker.1]: Process running mem=666M(130.1%)
2017-05-05T03:36:18.164514+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2017-05-05T03:36:37.951774+00:00 heroku[worker.1]: Process running mem=804M(157.0%)
2017-05-05T03:36:37.951813+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2017-05-05T03:36:57.964496+00:00 heroku[worker.1]: Process running mem=944M(184.6%)
2017-05-05T03:36:57.964542+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2017-05-05T03:37:37.826785+00:00 heroku[worker.1]: Process running mem=1040M(203.2%)
2017-05-05T03:37:37.826861+00:00 heroku[worker.1]: Error R15 (Memory quota vastly exceeded)
2017-05-05T03:37:37.826932+00:00 heroku[worker.1]: Stopping process with SIGKILL
2017-05-05T03:37:37.985631+00:00 heroku[worker.1]: Process exited with status 137
2017-05-05T03:37:37.998614+00:00 heroku[worker.1]: State changed from up to crashed
2017-05-05T03:37:38.000020+00:00 heroku[worker.1]: State changed from crashed to starting
2017-05-05T03:37:45.825684+00:00 heroku[worker.1]: Starting process with command `rake jobs:work`
2017-05-05T03:37:46.532529+00:00 heroku[worker.1]: State changed from starting to up
2017-05-05T03:37:50.758067+00:00 app[worker.1]: [Worker(host:a5db76f8-58b3-4585-b664-eee04efb8a96 pid:4)] Starting job worker
2017-05-05T03:37:50.758157+00:00 app[worker.1]: I, [2017-05-05T03:37:50.758063 #4] INFO -- : 2017-05-05T03:37:50+0000: [Worker(host:a5db76f8-58b3-4585-b664-eee04efb8a96 pid:4)] Starting job worker
我明显地跑进了内存墙(不知道如何在不购买更昂贵的dyno的情况下解决这个问题),但我认为没问题......它应该只是在磁盘上注册并且需要更长的时间, 对?我在cloud9上设置了一个具有相同配置的私有实例,这就是它的功能。有没有办法设置分页选项?
那我该怎么办?我不在乎PDF是否需要2-3分钟才能生成,我只是不想被终止!
谢谢!
答案 0 :(得分:0)
您使用的是哪个Ruby版本?如果您的运行速度低于2.1,那么您肯定应该升级到更高版本。
Heroku的官方指南解释了内存问题,你在细节上得到了同样的错误,解释了可能的修复。我认为这是你能得到的最好的资源!
https://devcenter.heroku.com/articles/ruby-memory-use
您还可以使用SideKiq gem将pdf生成移动到后台作业,因此它不会抛出heroku的超时错误。但是,您必须将pdf文件上传到Amazon S3等云服务器。