Rails 4, ActionMailer и Wicked PDF

Метод контроллера

def email_pdf
    @job = Job.find_by_id(params[:id].to_i)
    job_pdf = WickedPdf.new.pdf_from_string(render_to_string(:pdf => 'job', :template => 'job/show.pdf.erb', layout: 'mailer.html.erb'))
    JobMailer.send_jobs_email(params[:id].to_i, '[email protected]', 'Mahavir Jain', job_pdf).deliver_now

    respond_to do |format|
        format.json do
            render :json => {:success => true}, :status => 200
        end
    end

end

Рассылка вакансий

class JobMailer < ApplicationMailer
    def send_jobs_email(job_id, email, name, job_pdf)
        @name = name
        @job = Job.find_by_id(job_id)
        puts 'hello1'
        attachments['job'] = job_pdf
        puts @name
        mail(to: email, subject: 'Job', from: '[email protected]', from_name: 'JanaTrak Admin')
    end
end

Вывод

Rendered job/show.pdf.erb within layouts/mailer.html.erb (15.0ms)
"***************[\"/usr/local/bin/wkhtmltopdf\", \"-q\", \"file:///var/folders/dk/t3scf65x5vx23qq1fsm53s3r0000gn/T/wicked_pdf20151007-4801-h2de03.html\", \"/var/folders/dk/t3scf65x5vx23qq1fsm53s3r0000gn/T/wicked_pdf_generated_file20151007-4801-7uwh23.pdf\"]***************"
"***************[\"/usr/local/bin/wkhtmltopdf\", \"-q\", \"file:///var/folders/dk/t3scf65x5vx23qq1fsm53s3r0000gn/T/wicked_pdf20151007-4801-mp6b6i.html\", \"/var/folders/dk/t3scf65x5vx23qq1fsm53s3r0000gn/T/wicked_pdf_generated_file20151007-4801-3bayit.pdf\"]***************"

Rendered job_mailer/send_jobs_email.html.erb within layouts/mailer (0.1ms)
[{"email"=>"[email protected]", "status"=>"sent", "_id"=>"dc93087c39a949de827df06a1edb116e", "reject_reason"=>nil}]

Проблема

Из вывода я вижу, что могу правильно сгенерировать pdf, но по какой-то причине он не отправляет pdf в виде вложения. Также он не отправляет содержимое электронной почты. Но когда я удаляю вложение из кода, он правильно отправляет содержимое электронной почты.

Я проверил Rails 3 ActionMailer и Wicked_PDF и попробовал оба решения, но ни одно из них не сработало.

Я использую rails 4.2, ruby ​​2.1.2, wkhtmltopdf 0.12.2.1 (с исправленным qt).

Любая помощь очень ценится

***************** ОБНОВИТЬ ************************

Метод контроллера

def email_pdf
        @job = Job.find_by_id(params[:id].to_i)
        self.instance_variable_set(:@lookup_context, nil)
        self.instance_variable_set(:@_lookup_context, nil)
        job_pdf = WickedPdf.new.pdf_from_string(render_to_string(:template => 'job/show.pdf.erb', layout: 'mailer.html.erb'))
        #job_pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>')
        save_path = Rails.root.join('pdfs','job.pdf')
        dir = File.dirname(save_path)
        FileUtils.mkdir_p(dir) unless File.directory?(dir)
        File.open(save_path, 'wb') do |file|
            file << job_pdf
        end
        JobMailer.send_jobs_email(params[:id].to_i, '[email protected]', 'Mahavir Jain', save_path).deliver_now

        respond_to do |format|
            format.json do
                render :json => {:success => true}, :status => 200
            end
        end

    end

Метод рассылки

def send_jobs_email(job_id, email, name, job_pdf)
        @name = name
        @job = Job.find_by_id(job_id)
        puts 'hello1'
        attachments['job.pdf'] = File.read(job_pdf)
        puts job_pdf
        mail(to: email, subject: 'Job', from: '[email protected]', from_name: 'JanaTrak Admin')
    end

PDF генерируется правильно, и я вижу сохраненный PDF. Но опять же почему-то actionmailer не прикрепляет PDF, а также не отображает контент.

Я ничего не пропустил, связанный с вложением actionmailer?


person Veer    schedule 07.10.2015    source источник
comment
Не могли бы вы проверить, какой размер pdf?   -  person Arihant Godha    schedule 07.10.2015
comment
привет, PDF с простым текстом Hello World! тоже дает такую ​​же проблему..   -  person Veer    schedule 07.10.2015
comment
Вы пытались настроить тип mime?   -  person Arihant Godha    schedule 07.10.2015
comment
@ArihantGodha, как установить тип пантомимы? через инициализаторы? Я установил через инициализатор   -  person Veer    schedule 07.10.2015
comment
Для этого вам нужно сначала создать шаблон и отдельно сгенерировать вложение. Передайте имя файла и содержимое, и Action Mailer и гем Mail автоматически угадают mime_type, зададут кодировку и создадут вложение. вложения['имя_файла.jpg'] = File.read('/путь/к/имя_файла.jpg'). Пожалуйста, обратитесь к этому stackoverflow.com/questions/12339314/   -  person Arihant Godha    schedule 07.10.2015
comment
@ArihantGodha добавил обновленный код .. имя файла .pdf, поэтому я надеюсь, что он автоматически угадает тип пантомимы ..   -  person Veer    schedule 07.10.2015