проблема с реализацией wicked pdf на heroku
Я использую данное руководство для интеграции wicked_pdf на heroku. Но почему-то не получается. Я получил журналы от heroku, и он говорит следующее:
Processing PdfController#get_pdf to pdf (for 115.248.175.50 at 2011-02-15 23:54:44) [GET]
Parameters: {"format"=>"pdf", "action"=>"get_pdf", "id"=>"1", "controller"=>"pdf"}
***************WICKED***************
Rendering pdf/get_pdf
RuntimeError (PDF could not be generated!
/usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `exec': No such file or directory - /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64 - - (Errno::ENOENT)
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `popen3'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `fork'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `popen3'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `fork'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `popen3'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/wicked_pdf.rb:22:in `pdf_from_string'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:28:in `make_pdf'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:39:in `make_and_send_pdf'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:13:in `render'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/app/controllers/schedule_controller.rb:33:in `get_pdf'
Пожалуйста, Помогите. Спасибо заранее.
EDIT:
я внес некоторые изменения в свой код и прошел через эту ошибку, но все еще застрял здесь
NoMethodError (undefined method empty? for #<Pathname:0x2b7112392480>)
4 ответов
после просмотра вашей части редактирования, которая говорит: "неопределенный метод пуст? для #<Pathname:0x2b...>
Это означает, что вы где-то используя пустые? функция на объекте path тогда как пустой? является функцией строки, а не пути.
попробуйте узнать, где вы использовали объект path и использовать to_s для этого объекта.
попробуйте.
как получить wickedpdf gem для работы на Heroku
(см. цитату ниже для URL-адресов)
- создать папку с именем
bin
в корне вашего приложения Rails. - скачать и распаковать версии 0.9.9 на
wkhtmltopdf
двоичные файлы вbin
папка. Вам понадобится версия для вашей системы разработки и версия AMD64 для Heroku. Do не добавить к вашему git РЕПО еще. - установить выполнение разрешений для каждого двоичного файла в
bin
папку, например,chmod +x bin/wkhtmltopdf-amd64
- теперь
git add bin
- добавить
wicked_pdf
наGemfile
иbundle install
. Никакие другие драгоценные камни wkhtmltopdf не нужны. - создайте файл в папке
config/initializers
папка с именемwicked_pdf.rb
С исходным кодом ниже. git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
git push heroku
ваш проект Rails теперь настроен для Heroku. Отсюда добавьте свою логику программы для PDF файлы.
* * config / инициализаторы / wicked_pdf.rb**
if Rails.env.production?
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
else
# Linux (check your processor for Intel x86 or AMD x64)
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-i386"
# OS X
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-0.9.9-OS-X.i386"
# Windows
# wkhtmltopdf_path = 'C:\Program Files/wkhtmltopdf/wkhtmltopdf.exe'
end
WickedPdf.config = { exe_path: wkhtmltopdf_path, wkhtmltopdf: wkhtmltopdf_path }
как я пришел к такому выводу:
для начала, есть несколько вводящих в заблуждение статей в интернете относительно wkhtmltopdf
на wicked_pdf
камень, и Heroku
.
Существуют также проблемы с последними версиями wkhtmltopdf
(10.0+), которые вызывают выполнение повесить.
наконец, в какой-то момент должно было произойти изменение имен переменных конфигурации для WickedPdf
потому что несколько статей ссылка :exe_path
в то время как другие статьи ссылка :wkhtmltopdf
.
Даже документация GitHub WickedPdf чередуется между каждой переменной.
мое решение вы делаете не нужно составить wkhtmltopdf
из источника.
Ты не нужно установить wkhtmltopdf
из Homebrew. Я предоставил решение для этого, если вы действительно хотите brew install wkhtmltopdf
.
Вы также делаете не нужно добавить любой из "wkhtmltopdf"помощник драгоценные камни на ваш проект. Я пытался!--2-->, wkhtmltopdf-heroku
, wkhtmltopdf-engineyard
, wkhtmltopdf-binary
драгоценные камни и GitHub РЕПО. Отлично работал локально. Не повезло в хероку.
С консоли Rails на Heroku:
Я исследовал, какой процессор запускал серверы Heroku, запустив RUBY_PLATFORM
получены "x86_64-linux"
.
Я также заглянул внутрь bin
папка на Heroku, выдав Dir.entries('bin')
чтобы увидеть, какие файлы на самом деле существуют. Я заметил некоторые из wkhtmltopdf
драгоценные камни, которые я тестировал, разместили свои исполняемые файлы в этой папке. Подсказка!
Я побежал WickedPdf.new.pdf_from_string('Hello')
чтобы увидеть ошибки вывода и проверить различные конфигурации WickedPdf.
затем в ответе @barlow на настройку PDFKit
, есть сноска, которая дала окончательный ключ. Вы должны дайте Unix разрешения на выполнение wkhtmltopdf
двоичный файл перед фиксацией в Git. Бинго!
цитировать:
- официальные статические двоичные файлы wkhtmltopdf legacy http://wkhtmltopdf.org/old-downloads.html
- wicked_pdf https://github.com/mileszs/wicked_pdf
- PDFKit Барлоу.config https://stackoverflow.com/a/5098984/307308
- Как установить wkhtmltopdf с помощью Homebrew'https://stackoverflow.com/a/14043085/307308
на момент написания этой статьи:
- рельсы (3.2.13)
- wicked_pdf (0.9.6)
- wkhtmltopdf (0.9.9)
внесены изменения 2/12/2015
dscout разработал камень, который охватывает концепции моего ответа. Я рекомендую использовать gem, если ваш экземпляр Heroku поддерживает buildpacks.
внесены изменения 3/27/2015
еще один драгоценный камень, который работает с Heroku (и Linux AMD64 OSes) wkhtmltopdf-heroku Он автоматически определяет, установлены ли pdfkit, wicked_pdf и wisepdf gems.
Если вы добавляете локальную копию wkhtmltopdf в свое РЕПО, вы можете указать на нее так в инициализаторе.
PDFKit.configure do |config|
config.wkhtmltopdf = "#{RAILS_ROOT}/lib/wkhtmltopdf"
end
Не забудьте chmod +x вашу копию wkhtmltopdf в вашем РЕПО, прежде чем вы-git добавить его
надеюсь, что это помогает.
ищет двоичный файл wicked_pdf в : /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64
и нет там, поместите двоичный файл в папку в вашем приложении, а затем измените файл config/initializers/wicked_pdf.rb
включает:
:exe_path => "#{Rails.root}/path/to/wkhtmltopdf-amd64"
другая проблема, к которой вы можете прийти, если wicked_pdf создает файлы, заключается в том, что файловая система Heroku только читается, поэтому, если вы не найдете способ сказать wicked_pdf создать PDF-файлы в каталоге tmp, вы не сможете его использовать.