我有PDF,我需要在我的rails应用程序中从html转换,包括页眉和页脚。这给我留下了wkhtmltopdf (如果还有其他选择,请让我知道!)对于较小的PDF,此解决方案运行良好-但较大的PDF成为一个问题。我现在使用一个delayed_job worker在后台对一个业余爱好工作者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分钟才能生成,我只是不想被终止!
谢谢!
发布于 2017-05-05 22:50:45
您使用的是哪个Ruby版本?如果你运行的是2.1以下的版本,你肯定应该升级到更高的版本。
Heroku的官方指南解释了内存问题,与你在详细信息中得到的错误相同,并解释了可能的修复。我认为这是你能得到的最好的资源!
https://devcenter.heroku.com/articles/ruby-memory-use
您还可以使用heroku将SideKiq生成转移到后台作业,这样就不会抛出heroku的超时错误。但是,您必须将pdf文件上传到云服务器,如亚马逊S3。
https://stackoverflow.com/questions/43796203
复制相似问题