2013-03-27 137 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,你的問題讓我更加想到這個錯誤來自哪裏。

相關問題