2017-05-05 1 views
0

J'ai des PDF que j'ai besoin de convertir à partir de html dans mon application rails qui comprend à la fois les en-têtes et les pieds de page. Cela m'a laissé avec wkhtmltopdf (s'il y a une autre option, s'il vous plaît faites le moi savoir!) Pour les petits fichiers PDF, cette solution a bien fonctionné - mais les plus gros fichiers PDF sont devenus un problème. J'utilise maintenant un worker de delayed_job pour exécuter cette conversion en arrière-plan sur un dyno de travailleur hobby - et cela prend du temps, mais ça marche ... parfois. Pour les PDF plus volumineux (ou ceux avec beaucoup d'images), je n'obtiens jamais le résultat. Creuser dans les journaux pour le travailleur, je vois ce qui suit:wkhtmltopdf en cours d'exécution sur l'horodateur Heroku

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 

Je suis en cours d'exécution clairement dans un mur de la mémoire (pas sûr comment résoudre ce problème sans avoir à acheter un dyno beaucoup plus cher), mais je pense que c'est correct ... il devrait juste sortir sur le disque et prendre beaucoup plus de temps, non? J'ai une instance privée installée sur cloud9 avec la même configuration, et c'est ce qu'elle fait là. Est-il possible de configurer des options de pagination?

Alors, que puis-je faire? Je ne me soucie pas si le PDF prend 2-3 minutes pour générer, je ne veux tout simplement pas se terminer!

Merci!

Répondre

0

Quelle version de Ruby utilisez-vous? Si vous courez en dessous de 2.1, vous devriez certainement passer à une version supérieure.

Le guide officiel de Heroku explique les problèmes de mémoire, la même erreur que vous avez eu dans les détails, en expliquant les correctifs possibles. Je pense que c'est la meilleure ressource que vous pouvez obtenir!

https://devcenter.heroku.com/articles/ruby-memory-use