Rails アプリに PDF 出力を実装して、それを Heroku で動かすまでの作業メモ。
プロジェクトを作成
rails new pdf_sample --skip-bundle
gem は vendor/bundle にインストールしたいから、bunele install はスキップして後でやる。
Heroku には git を使ってデプロイするので、git リポジトリも作成しておく。
git init git add . git commit -m "Initial commit"
wicked_pdf と wkhtmltopdf-binary-11 をインストール
PDF 出力には wicked_pdf を使う。
wicked_pdf は wkhtmltopdf に依存しているので、wkhtmltopdf-binary-11 も使う。 bundler で wkhtmltopdf-binary-11 をインストールすれば、wkhtmltopdf 本体もインストールされる寸法。
wkhtmltopdf-binary は wkhtmltopdf 本体のバージョンが低いので、wkhtmltopdf-binary-11 を選択した。
ruby "2.0.0" gem "wkhtmltopdf-binary-11" gem "wicked_pdf" gem "sqlite3", group: [:development, :test] gem 'rails_12factor', group: [:production]
sqlite3 は Heroku 上では使わないので、開発中またはテストのみインストールする。
あとは
bundle install --path vendor/bundle --without production
を実行して gem のインストール完了。
コントローラーを作成
bundle exec rails g controller home index
でひな形を生成し、PDF を表示するコードを記述。
class HomeController < ApplicationController def index respond_to do |format| format.html { redirect_to root_path(format: :pdf, debug: 1) } format.pdf do render pdf: "index", encoding: "UTF-8", layout: "pdf.html", show_as_html: params[:debug].present? end end end end
PDF 用のレイアウトを作成
app/views/layout 下に pdf.html.erb を作成する。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>PdfSample</title> <%= wicked_pdf_stylesheet_link_tag "application" -%> <%= wicked_pdf_javascript_include_tag "application" %> </head> <body> <%= yield %> </body> </html>
PDF 用のビューを作成
app/views/home 下に index.pdf.erb を作成する。中身は index.html.erb をまんまコピペ。
<h1>Home#index</h1> <p>Find me in app/views/home/index.pdf.erb</p>
ルーティングを修正
今回は home#index をルートに割り当てる。
PdfSample::Application.routes.draw do root 'home#index' end
ローカルで確認
bundle exec rails server
でアプリを起動し http://localhost:3000/?format=pdf にアクセス。
PDF のビューアーで表示されたら成功。
あとは、これまでの修正を git リポジトリに忘れずコミットしておく。
git add . git commit -m "PDF 出力を作成"
Heroku 上で確認
あらかじめ Heroku にアプリを作成しておき、git リポジトリの remote に追加。
そして
git push heroku master
でデプロイ。 データベース使わないからマイグレーションは不要。 しばらく待って、デプロイが無事成功したら、Heroku 上のアプリにアクセスしてみる。
Heroku 上でも PDF ビューアーで表示されたら、めでたしめでたし。
2014/03/16 追記
canvas を描画したい場合は、wkhtmltopdf-heroku または wkhtmltopdf-binary を使った方がいい。