with wicked_pdf template render_to_string rails page generate create ruby-on-rails-3 actionmailer wicked-pdf

ruby on rails 3 - template - Rails 3 ActionMailer y Wicked_PDF



wkhtmltopdf page template (3)

Heres ''cómo arreglé este problema:

  1. Eliminado wicked_pdf
  2. Gamba instalada ( https://github.com/sandal/prawn/wiki/Using-Prawn-in-Rails )

Mientras que Gamba es / fue un poco más engorroso al diseñar un documento, puede fácilmente deslizarse por los archivos adjuntos de correo ...

Intento generar correos electrónicos con anexos PDF renderizados usando ActionMailer y wicked_pdf.

En mi sitio, ya estoy usando wicked_pdf y actionmailer por separado. Puedo usar wicked_pdf para publicar un pdf en la aplicación web, y puedo usar ActionMailer para enviar correos electrónicos, pero tengo problemas para adjuntar contenido de PDF renderizado a un ActionMailer (editado para contenido):

class UserMailer < ActionMailer::Base default :from => "[email protected]" def generate_pdf(invoice) render :pdf => "test.pdf", :template => ''invoices/show.pdf.erb'', :layout => ''pdf.html'' end def email_invoice(invoice) @invoice = invoice attachments["invoice.pdf"] = {:mime_type => ''application/pdf'', :encoding => ''Base64'', :content => generate_pdf(@invoice)} mail :subject => "Your Invoice", :to => invoice.customer.email end end

Usando Railscasts 206 (Action Mailer in Rails 3) como guía, puedo enviar correos electrónicos con mi contenido enriquecido deseado, solo si no intento agregar mi archivo adjunto.

Si trato de agregar el archivo adjunto (como se muestra arriba), obtengo un adjunto de lo que parece ser el tamaño correcto, solo el nombre del archivo adjunto no aparece como se espera, ni es legible como un pdf. Además de eso, el contenido de mi correo electrónico falta ...

¿Alguien tiene alguna experiencia con ActionMailer mientras procesa el PDF sobre la marcha en Rails 3.0?

¡Gracias por adelantado! - Dan


Utilicé las soluciones de Unixmonkey anteriores, pero luego cuando actualicé a los rieles 3.1.rc4, la variable de instancia @lookup_context ya no funcionaba. Quizás haya otra manera de lograr el mismo borrado del contexto de búsqueda, pero por ahora, establecer el archivo adjunto en el bloque de correo funciona bien así:

def results_email(participant, program) mail(:to => participant.email, :subject => "my subject") do |format| format.text format.html format.pdf do attachments[''trust_quotient_results.pdf''] = WickedPdf.new.pdf_from_string( render_to_string :pdf => "results", :template => ''/test_sessions/results.pdf.erb'', :layout => ''pdf.html'') end end end


WickedPDF puede procesar muy bien un archivo para adjuntarlo a un correo electrónico o guardarlo en el sistema de archivos.

Su método anterior no funcionará para usted porque generate_pdf es un método en el programa de correo que devuelve un objeto de correo (no el PDF que usted quería)

Además, hay un error en ActionMailer que hace que el mensaje tenga un formato incorrecto si intenta invocar el procesamiento en el método mismo

http://chopmode.wordpress.com/2011/03/25/render_to_string-causes-subsequent-mail-rendering-to-fail/

https://rails.lighthouseapp.com/projects/8994/tickets/6623-render_to_string-in-mailer-causes-subsequent-render-to-fail

Hay 2 formas en que puede hacer que esto funcione,

El primero es usar el truco descrito en el primer artículo anterior:

def email_invoice(invoice) @invoice = invoice attachments["invoice.pdf"] = WickedPdf.new.pdf_from_string( render_to_string(:pdf => "invoice",:template => ''documents/show.pdf.erb'') ) self.instance_variable_set(:@lookup_context, nil) mail :subject => "Your Invoice", :to => invoice.customer.email end

O bien, puede configurar el archivo adjunto en un bloque como sigue:

def email_invoice(invoice) @invoice = invoice mail(:subject => ''Your Invoice'', :to => invoice.customer.email) do |format| format.text format.pdf do attachments[''invoice.pdf''] = WickedPdf.new.pdf_from_string( render_to_string(:pdf => "invoice",:template => ''documents/show.pdf.erb'') ) end end end