2012-02-28 4 views
2

J'ai travaillé avec wicked_pdf pour générer des fichiers PDF dans Rails, et cela fonctionne très bien dans mon environnement de développement, mais je reçois une erreur de 500 (mais pas d'erreurs spécifiques dans mon log) quand j'essaie d'en générer un sur mon environnement de production. La première chose que j'ai remarqué est que le binaire wkhtmltopdf était dans un autre endroit sur ma boîte de production, donc je l'ai ajouté ce qui suit à mon wicked_pdf.rb initialiseur:Wicked_pdf fonctionne bien en développement, mais pas en production

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

Voilà comment j'appelle dans mon contrôleur:

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 

et voici le contenu de mon avis:

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

Quand j'ajoute debug=true à la chaîne de requête, il semble générer OK (et le wicked_pdf_image_tag helper semble générer l'emplacement correct, ce qui semblait être un gotcha dans Rails 3.1). Des idées? Je suis assez nouveau à Ruby/Rails, alors s'il vous plaît soyez gentil!

Répondre

7

Il est beaucoup plus facile de faire cela si vous laissez bundler s'inquiéter de l'approvisionnement de wkthmltopdf. Vous pouvez le faire en installant ceci:

gem "wkhtmltopdf-binary" 

puis de lancer l'installation de l'ensemble. Après cela, vous devriez être en mesure de supprimer votre spécification exe_path personnalisée et cela devrait fonctionner correctement. Si cela ne fonctionne pas, faites le moi savoir.

Joe

+0

Excellent, qui a obtenu, merci! – Pezholio

+0

Juste upvote si cela ne vous dérange pas alors! Merci! – TheDelChop

+0

Aucun problème. Terminé! :) – Pezholio

0

Si une image fixe montrant dans un environnement non de production alors s'il vous plaît essayer

image_tag wicked_pdf_asset_base64('image.png') 
Questions connexes