2013-03-27 61 views
1

我正在使用PDFKit从Heroku Cedar上Resque作业中的给定url创建pdf。我的代码如下所示:使用PDFKit在Heroku上生成文件 - 没有这样的文件或目录

kit = PDFKit.new(url) 
pdf = kit.to_file("/tmp/#{SecureRandom.hex}.pdf") 

然后我使用fog将文件上传到S3以便永久存储。这项工作通常工作,但也可能失败的时间与第三:

No such file or directory - /tmp/a05c165fc80878b75fd15c447695de71.pdf 

手动通过控制台运行的代码会产生同样的错误。

根据Heroku文档,我应该可以在Cedar上的应用程序目录中的任何位置编写一个临时文件。我试着先创建tmp目录(在控制台中),但似乎没有改变任何东西。没有保存到“#{Rails.root}/tmp /#{SecureRandom.hex} .pdf”。

任何想法将不胜感激。

UPDATE

在控制台完整的错误是:

Error: Failed loading page http://grist.org/living/you-look-great-in-green-clothing-industry-gets-a-makeover-maybe.html 
(sometimes it will work just to ignore this error with --load-error-handling ignore) 
Errno::ENOENT: No such file or directory - /tmp/55a1d418074736decfd4e123d8e2bba2.pdf 

看来,也许这是从wkhtmltopdf到来的错误,但是,我不知道在哪里添加此标志我通过PDFkit使用wkhtmltopdf。

+0

“然后使用雾上传文件到S3”这一切都在同一个工作进程中完成,是吗?否则,你可能会写一个dyno的tmp,并试图从另一个dyno访问,这将无法正常工作。 – catsby 2013-03-27 16:57:33

+0

嗨。是的,这是在同一个工作进程中完成的。第二行实际上是object.pdf = kit.to_file(“/ tmp?#{SecureRandom.hex} .pdf”); object.save。调用保存在对象上会触发雾以上传图像。 – middkidd 2013-03-27 18:42:54

+0

@middkidd问题解决了吗? – khalidh 2017-08-07 05:45:33

回答

2

看起来像解决方案,因为我第二次提出的错误建议,是忽略加载错误。我这样做有:

PDFKit.configure do |config| 
    config.default_options[:load_error_handling] = 'ignore' 
end 

我是在没有首先看到这个警告,因为Resque只显示我最后的错误。感谢@ctshryock,你的问题让我更加想到这个错误来自哪里。

相关问题