rails has_one_attached guides activestorage active_storage active ruby-on-rails heroku pdf-generation production-environment wicked-pdf

ruby on rails - has_one_attached - problema de implementación de pdf malvado en heroku



rails attachment (4)

Estoy usando esta guía para integrar wicked_pdf en heroku. Pero de alguna manera no parece funcionar. Conseguí los registros de heroku y dice esto:

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''

Por favor ayuda. Gracias por adelantado.

EDITAR:

Hice algunos cambios en mi código y resolví este error, pero todavía me quedé atascado aquí

NoMethodError (undefined method empty? for #<Pathname:0x2b7112392480>)


Busca el binario wicked_pdf en: /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64

Y no está allí, coloque el binario en una carpeta dentro de su aplicación y luego cambie el archivo config/initializers/wicked_pdf.rb para incluir:

:exe_path => "#{Rails.root}/path/to/wkhtmltopdf-amd64"

Otro problema al que podría llegar si wicked_pdf crea archivos, es el hecho de que el sistema de archivos Heroku solo se lee, por lo tanto, a menos que encuentre una manera de decirle a wicked_pdf que cree los pdfs en el directorio tmp, es posible que no pueda usarlos.


Después de ver tu parte de edición que dice "¿método indefinido vacío? Para #<Pathname:0x2b...>

Esto significa que estás en algún lugar usando vacío? ¿Funciona en un objeto de ruta mientras que vacío? Es una función de una cadena y no de ruta.

intente averiguar dónde ha utilizado un objeto de ruta de acceso y utilice to_s en ese objeto.

Pruébalo.


Si agrega una copia local de wkhtmltopdf a su repositorio, puede señalarlo así en un inicializador.

PDFKit.configure do |config| config.wkhtmltopdf = "#{RAILS_ROOT}/lib/wkhtmltopdf" end

recuerde hacer chmod + x su copia wkhtmltopdf en su repositorio antes de que usted - git agregarlo

Espero que esto ayude.


Cómo conseguir que la gema WickedPdf funcione en Heroku

(ver cita abajo para las urls)

  1. Crea una carpeta llamada bin en la raíz de tu aplicación Rails.
  2. Descargue y extraiga la versión 0.9.9 de los wkhtmltopdf binarios wkhtmltopdf en la carpeta bin . Necesitará la versión para su sistema de desarrollo y la versión AMD64 para Heroku. No agregue a su repositorio git todavía.
  3. Establezca los permisos de ejecución para cada binario en la carpeta bin por ejemplo, chmod +x bin/wkhtmltopdf-amd64
  4. Ahora git add bin
  5. Agregue wicked_pdf a su Gemfile y la bundle install . No se necesitan otras gemas wkhtmltopdf.
  6. Cree un archivo en la carpeta config/initializers llamada wicked_pdf.rb con el código fuente a continuación.
  7. git commit -am ''added wkhtmltopdf binaries and wicked_pdf gem''
  8. git push heroku

Su proyecto Rails ahora está configurado para Heroku. Desde aquí, agregue la lógica de su programa para archivos PDF.

** config / initializers / 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 }

Cómo llegué a esta conclusión:

Para empezar, hay VARIOS artículos wkhtmltopdf en la Web sobre wkhtmltopdf , la gema wicked_pdf y Heroku . También hay problemas con las versiones recientes de wkhtmltopdf (10.0+) que hacen que la ejecución se bloquee.

Por último, en algún momento debe haber habido un cambio en los nombres de las variables de configuración para WickedPdf porque varios artículos hacen referencia a :exe_path mientras que otros artículos hacen referencia a :wkhtmltopdf . Incluso la documentación de GitHub de WickedPdf se alterna entre cada variable.

Mi solución no es necesario compilar wkhtmltopdf desde la fuente. No es necesario instalar wkhtmltopdf desde Homebrew. Le proporcioné la solución a esto si realmente desea brew install wkhtmltopdf . Tampoco es necesario que agregues ninguna de las gemas de ayuda ''wkhtmltopdf'' a tu proyecto. wkhtmltopdf , wkhtmltopdf-heroku , wkhtmltopdf-engineyard , wkhtmltopdf-binary gems y los wkhtmltopdf-binary GitHub. Funcionó muy bien a nivel local. No hay suerte en Heroku.

Desde una consola Rails en Heroku: investigué qué CPU estaba ejecutando los servidores de Heroku ejecutando RUBY_PLATFORM que produjo "x86_64-linux" . También eché un vistazo dentro de la carpeta bin en Heroku emitiendo Dir.entries(''bin'') para ver qué archivos existen realmente allí. Noté que algunas de las gemas wkhtmltopdf que estaba probando colocaron sus ejecutables en esta carpeta. ¡Una pista! Corrí WickedPdf.new.pdf_from_string(''Hello'') para ver los errores de salida y probar varias configuraciones de WickedPdf.

Luego, en la respuesta de PDFKit a la configuración de PDFKit , hay una nota que dio la clave definitiva. Debe dar a los permisos de ejecución de Unix a wkhtmltopdf el binario antes de comprometerse con Git. ¡Bingo!

Citar:

  1. Binarios estáticos oficiales wkhtmltopdf heredados http://wkhtmltopdf.org/old-downloads.html
  2. wicked_pdf https://github.com/mileszs/wicked_pdf
  3. PDFKit.config de Barlow https://.com/a/5098984/307308
  4. Cómo instalar wkhtmltopdf utilizando Homebrew ` https://.com/a/14043085/307308

En el momento de escribir este artículo:

  • rieles (3.2.13)
  • wicked_pdf (0.9.6)
  • wkhtmltopdf (0.9.9)

Enmendado el 2/12/2015

dscout ha desarrollado una gema que abarca los conceptos de mi respuesta. Recomiendo usar la gema si su instancia de Heroku es compatible con paquetes de compilación.

Modificado el 27/03/2015

Otra gema que funciona con Heroku (y sistemas operativos Linux AMD64) wkhtmltopdf-heroku automáticamente si hay instaladas las gemas pdfkit, wicked_pdf y wisepdf.