Wicked_pdf отлично работает в разработке, но не в производстве - PullRequest
2 голосов
/ 28 февраля 2012

Я работал с wicked_pdf для генерации некоторых PDF-файлов в Rails, и он отлично работал в моей среде разработки, но я получаю ошибку 500 (но никаких конкретных ошибок в моем журнале), когда я пытаюсь сгенерировать одну на своем производственная среда. Первое, что я заметил, было то, что двоичный файл wkhtmltopdf находился в другом месте на моей рабочей коробке, поэтому я добавил следующее в мой инициализатор wicked_pdf.rb:

if Rails.env == "production"
    WickedPdf.config = {
        :exe_path => '/usr/bin/wkhtmltopdf'
    }
end

Вот как я это называю в моем контроллере:

  def certificate
    @inspection = Inspection.find(params[:id])
    @council = Council.find(@inspection.councilid)  
    respond_to do |format|
        format.pdf do
            render :pdf => @inspection.slug,
                   :show_as_html => params[:debug].present?,
                   :margin => {:top            => 0,
                               :bottom         => 0,
                               :left           => 0,
                               :right          => 0}
        end
    end
  end

А вот содержимое моего взгляда:

# certificate.pdf.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
            font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif;
        }

        img#bg {
            width: 800px;
            height: 1130px;
            position: absolute;
        }

        #date p, #council p {
            line-height: 17px;
            font-size: 12px;
        }

        #council {
            position: absolute;
            top: 650px;
            left: 445px;        
        }

        #logo {
            position: absolute;
            top: 965px;
            left: 98px;
        }

        #logo img {
            height: 65px;
        }

        #address {
            position: absolute;
            top: 425px;
            left: 300px;        
        }

        #address p {
            font-size: 22px;
            line-height: 27px;
        }

        #date {
            position: absolute;
            top: 650px;
            left: 98px;
        }

    </style>
  </head>
  <body>
      <%= wicked_pdf_image_tag "certificate#{@inspection.rating}.jpg", :id => "bg" %>

      <div id="address">
      <p><%= @inspection.name %><br />
      <%= @inspection.address("<br />").html_safe %>      </p>
      </div>

      <div id="date">
      <p><%= @inspection.date.strftime("%B %d %Y") %></p>
      </div>

      <div id="council">
      <p><%= @council.address.html_safe %><br /><br />
      <strong>Tel: </strong><%= @council.tel %></p>
      </div>

      <div id="logo">
      <%= wicked_pdf_image_tag "certificates/#{@council.logo}.png" %>
      </div>

  </body>
</html>

Когда я добавляю debug=true к строке запроса, кажется, что она генерирует OK (а помощник wicked_pdf_image_tag, похоже, генерирует правильное местоположение, которое в Rails 3.1 казалось неправильным). Есть идеи? Я довольно новичок в Ruby / Rails, поэтому, пожалуйста, будьте осторожны!

Ответы [ 3 ]

7 голосов
/ 28 февраля 2012

Гораздо проще сделать это, если вы позволите упаковщику беспокоиться о поиске зависимости от wkthmltopdf. Вы можете сделать это, установив это:

gem "wkhtmltopdf-binary"

, а затем запустить установку пакета. После этого вы сможете удалить пользовательскую спецификацию exe_path, и она должна работать правильно. Если это не сработает, дайте мне знать.

Джо

0 голосов
/ 20 июня 2019

Я использую wicked-pdf как приложение к электронному письму.В разработке он работает нормально, но в работе он показывает

ActionView :: Template :: Error: неинициализированная константа AssetCdnHosts

attachments["purchase_order.pdf"] = WickedPdf.new.pdf_from_string(
        render_to_string(pdf: 'purchase_order', template: "device_orders/_preview_purchase_order.html.erb",locals: {vendor_info: vendor_info,device_order: device_order})
      )
0 голосов
/ 04 декабря 2017

Если неподвижное изображение не отображается в производственной среде, попробуйте

image_tag wicked_pdf_asset_base64('image.png')
...