2016-03-22 24 views
4

私は簡単なDjangoアプリを持っています。これはNginxの後ろにホストされています。私はweasyprintを使ってPDFレポートを作成しています。 weasyprintには、staticファイルにアクセスするには、base_urlプロパティが必要です。Nginxプロキシの背後にあるDjangoのベースURL

下記のdjangoコードはローカルマシン(デベロッパーサーバー下)で正常に動作しますが、502 Bad Gateway Nginxの背後に公開するとエラーが発生します。

View.py

html = render_to_string('admin/enquiry/quoterequest/generate.html', {'enquiry': enquiry}) 

response = HttpResponse(content_type='application/pdf') 

response['Content-Disposition'] = 'filename=\"Enquiry_{}.pdf'.format(enquiry.reference) 
weasyprint.HTML(string=html,base_url=request.build_absolute_uri()).write_pdf(response, stylesheets=[ 
    weasyprint.CSS(settings.STATICFILES_DIRS[0] + '/css/print.css')]) 

私はbase_url属性を削除する場合は、上記のコードは、(画像を印刷せずに)正常に動作します。ご入力をお願い申し上げます - のいずれかのセットアップ方法nginxまたはこれはnginxログからのエラーメッセージである

@page { 
    size: letter; 
    margin: 1.5in .25in 1.9in .5in; 

    @top-center { 
    content: url("/uploads/header_footer/header.jpg"); 
    height: 100%; 
    width: 100%; 
    } 

    @bottom-center { 
    background-image: url("/uploads/header_footer/footer.jpg"); 
    background-repeat: no-repeat; 
    background-position: center; 
    content: "Page " counter(page); 
    height: 100%; 
    width: 100%; 
    vertical-align: bottom;; 
    } 
} 

print.css

nginxのコンフィグ

# configuration of the server 
server { 
    listen  80; 
    server_name 192.168.33.10; # Vagrant IP 
    root  /home/www/my_project; 
    charset  utf-8; 

    client_max_body_size 75M; # max upload size 

    location /media { 
     alias /home/www/my_project/assets/uploads; 
    } 

    location /static { 
     alias /home/www/my_project/assets/static; 
    } 

    location/{ 
     proxy_pass http://localhost:8001; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
    } 

} 

ジャンゴ

からbase_urlをretrive。

upstream prematurely closed connection while reading response header from upstream, client: 192.168.33.1, server: 192.168.33.10, request: "GET /enquiry/admin/enquiry/quoterequest/view/1/ HTTP/1.1", upstream: "http://127.0.0.1:8001/enquiry/admin/enquiry/quoterequest/view/1/", host: "192.168.33.10", referrer: "http://192.168.33.10/admin/enquiry/quoterequest/" 

答えて

1

これは解決策の一種です。そのためには192.168.33.10、そのベースアドレスはhttp://192.168.33.10/media/' base_url parameter for weasyprint`にはまだ問題があります。手動でベースアドレスを入力してもそのトリックはありませんでした。

これはまだ動作し、502不正なゲートウェイ

weasyprint.HTML(string=html, base_url='http://192.168.33.10/media/').write_pdf(response) 

で返すだから私はtemplateを変更することを決めていません。私は定義されたURLをしたどこだから、私は...

<img src="http://{{ request.META.HTTP_HOST }}{{ MEDIA_URL }}{{ myapp.mymodel.my_image }}"> 

にそれらを変更し、MEDIA_URLを得るために、私View.pycontext_instanceを追加しました。うまくいけば、誰かがweasyprintbase_url問題の答えを思いつきます。

html = render_to_string('admin/enquiry/quoterequest/generate.html', {'enquiry': enquiry}, context_instance=RequestContext(request)) 

response = HttpResponse(content_type='application/pdf') 

response['Content-Disposition'] = 'filename=\"Enquiry_{}.pdf'.format(enquiry.reference) 

weasyprint.HTML(string=html,base_url=request.build_absolute_uri()).write_pdf(response, stylesheets=[ 
    weasyprint.CSS(settings.STATICFILES_DIRS[0] + '/css/print.css')]) 
関連する問題