2013-03-27 4 views
1

Я использую PDFKit для создания PDF-файлов с заданного URL-адреса в рамках задания Resque на кедрах Heroku. Мой код выглядит так:Создание файла с PDFKit на Heroku - Нет такого файла или каталога

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

Затем я загружаю файл с помощью тумана на 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, однако, я не уверен, где добавить этот флаг, если Я использую wkhtmltopdf через PDFkit.

+0

«затем загрузите файл с помощью тумана на S3», это все сделано в том же рабочем процессе, да? В противном случае вы можете писать в tmp одного dyno и пытаться получить доступ к другому динамику, который не будет работать. – catsby

+0

Привет. да, это делается в одном и том же рабочем процессе. Вторая строка - фактически object.pdf = kit.to_file ("/ tmp? # {SecureRandom.hex} .pdf"); object.save. Вызов сохранения объекта вызывает туман для загрузки изображения. – middkidd

+0

проблема @middkidd решена? – khalidh

ответ

2

Похоже, что решение, так как, как я предположил, второе сообщение, было игнорировать ошибку загрузки. Я сделал это с помощью:

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

Я не видел этого предупреждения сначала, потому что Ресек только показывал мне последнюю ошибку. Спасибо @ctshryock, ваш вопрос заставил меня немного подумать о том, откуда именно эта ошибка.