バックグラウンド
読んだ後、Prawnが出て、wkhtmltopdfが入っているように見えました。また、Rails用のPDFKitとwicked_pdfの宝石が新しいクールなようです。そこで、PDFKitの使用方法に関するRyanのスクリーンキャストを見つけました。私はすべてをインストールし、問題なくCLIでwkhtmltopdfをテストし、Rails設定をいじって複数のプロセスを実行し、アセットパイプラインが機能するようにしました。プロセスの最後で立ち往生している(実際にはPDFを取得している)ことを除けば、すべて問題ないようです。サーバーからの応答)。
質問
ビューのバージョンを要求すると.pdf
(PDFKitミドルウェアオプションを使用しています)、ブラウザーは応答を待つだけですが、Railsプロセスを強制終了するとすぐに、取得する予定のPDFがブラウザーにポップアップ表示されます。窓。何が得られますか?
私が使用しているもの
- OS:OSX 10.8.1
- レール:3.2.8
- Ruby:1.9.3
- wkhtmltopdf:0.11.0_rc1(実行
wkhtmltopdf -V
すると0.10.0_rc2と表示されますが) - qt:4.8.2
私がしたこと
config.middleware.use "PDFKit::Middleware"
私のapplication.rb
ファイルにロードしてPDFKitミドルウェアを使用しました。gem 'pdfkit'
私のGemfileに含まれていて、Bundlerでインストールしました- 初期化子で
.pdf
mime-typeを次のように設定しますmime_types.rb
Mime::Type.register_alias "application/pdf", :pdf
- アセットパイプラインがPDFエンジンと競合しないように、複数のスレッドに追加されまし
config.threadsafe!
たconfig/environments/development.rb
- テスト
wkhtmltopdf http://www.google.com google.pdf
し、期待どおりにGoogleホームページのPDFを生成しました - PDFKitをwicked_pdfに交換しようとしましたが、同じ問題が発生しました(ハングしますが、Railsプロセスが強制終了されると、PDFは期待どおりにレンダリングされます)
それはどのようなものか
これは、Railsによってレンダリングされた通常のhtmlページです(クライアントの詳細をぼかしました):
これは、に移動しようとしたときにRailsによって出力されるCLIlocalhost:3000/some/path.pdf
です。(応答を待っている間、アプリがハングします):
最終的にRailsプロセスを強制終了するとctrl-c
、PDFが期待どおりにブラウザに表示されます(CSSとHTMLが適切にレンダリングされているため、アセットは正常に読み込まれるようです)。
これまでの結論
PDFKitをwicked_pdfと交換して同じ結果を得ると、問題はそれらのライブラリにあるのではなく、開発環境に関係していると思われるようです。しかし、wkhtmltopdfはコマンドラインから正常に実行されるため、wkhtmltopdfとQTがそれぞれの仕事をしていると思います。問題はRailsにあるはずです。たぶん私は何かを正しく構成していませんか?
助けを求める
問題が正確に何であるかをどのように判断し、どのように修正しますか?
あなたが私を助けることができれば私はあなたを愛します<3
アップデート
また、次のようにミドルウェアオプションなしでPDFを(を使用して)レンダリングする別の方法を使用してみました(これを行うと、ファイルから.to_pdf
コメントアウトしました):config.middleware.use "PDFKit::Middleware"
application.rb
respond_to do |format|
format.html
format.pdf do
html = '<html><body>This is a test.</body></html>'
@pdf = PDFKit.new(html)
send_data @pdf.to_pdf,
:filename => 'whatever.pdf',
:type => 'application/pdf',
:disposition => 'attachment'
end
end