Rails用PDF生成ライブラリ「wicked_pdf」のソースを読んでみる


興味50%、仕事50%でRailsでPDFを出力したいことがあり、「rails pdf」でググると最初にヒットする wicked_pdf のソースコードを読んでみた。

まとめ

  • PDF生成は wkhtmltopdf に全て委譲している。
  • Controllerの #render_to_string でHTMLのStringを生成、保存。この結果を wkhtmltopdf に渡してPDF生成。最後にこの結果を #send_data で送信。
  • css/js/画像などの静的ファイルは、そのままでは参照できないため一工夫している。
  • HTMLやPDFをいったんメモリ上に全て読み込む点は注意。文書のサイズが大きいとメモリ使用量が多くなってしまう可能性がありそう。
  • コード量も多くなく、読みやすかった。ただ、Ruby 1.8.7、Rails 2.3をサポートしており、このせいで若干コードが汚くなっている気はした。
  • 完全に理解するには wkhtmltopdf コマンドで何ができるかを確認する必要がある。

続きを読む →

Railsで複数のログにリクエストIDを出力する


Railsで標準のログ(Rails.logger)以外にオリジナルのログを出力している時、なんらかの共通のキーを出力していないとログ間の対応が取りづらい、もしくは取れない時がある。それを解決するため、1つのHTTPリクエストごとに振られるリクエストIDを各ログに出力することで対応を取りやすくした時のメモ。

まとめ

  • RackMiddlewareでFiberローカル変数にリクエストIDを入れる。
  • 各ログではFiberローカル変数からリクエストIDを取得して、ログに出力する。
  • さくっと扱うためのGemを作ったので、使ってみてください。

続きを読む →

PostgreSQLに負荷テスト用のデータを高速にINSERTする


業務で負荷テスト用のレコードを大量(7000万行ほど)にPostgreSQLのDBに作成しなければいけなかったのですが、それを高速(1時間弱)に実施できたのでメモ。

まとめ

  • PostgreSQLの GENERATE_SERIES 関数と INSERT SELECT文を組み合わせて数万レコードを一気に作成します。
  • Railsでちょっとだけ使いやすいgem作ったのでよかったらどうぞ。

続きを読む →

DTI ServersMan@VPSのサーバーにsshで接続できなくなった


更新が滞ってしまったので、小さなことですが一個書いておきます。

このブログは、DTI社のServersMan@VPSというVPSのサービスを使って運営しています。このサーバーにsshで接続して、メンテナンスしたり、機能追加したりしているのですが、今日sshで接続できなくなっていることがわかりました。2ヶ月前くらいは普通に接続できたはずなのに…。

ちょっと調べて解決できたのですが、同じ問題で苦しむ人がいるかもしれないと思ったので、メモを残します。

まとめ

sshコマンドで接続する時に「-4」オプション(IPv4を使う)を指定する。

続きを読む →