【Rails6】wicked_pdfを本番環境(EC2, AmazonLinux)でデプロイとPDF出力ができない解決方法

本番環境(EC2, AmazonLinux)にデプロイがエラーになる

デプロイの環境と方法は、以下の記事をそのまま実行済み。

サルでもできる!? Rails6 のアプリをAWS EC2にデプロイするまでの全手順【前半】(VPC, RDS, EC2, Capistrano)

サルでもできる!? Rails6 のアプリをAWS EC2にデプロイするまでの全手順【後半】(独自ドメイン, HTTPS化, S3, CloudFront)

開発環境では、PDF出力に問題なし。

どうやら、Gemを変更する必要があるらしいです。

Gemを本番環境と開発環境で分ける

gem 'wicked_pdf'
group :development do
  gem 'wkhtmltopdf-binary'
end

group :production do
  gem 'wkhtmltopdf-binary-aml', git: 'https://github.com/insphire/wkhtmltopdf-binary-aml'
end

これで、開発環境と本番環境のGemを分けました。

bundle installを忘れずに。

wicked_pdf.rbの記述を変更

config/initializers/wicked_pdf.rb を以下のように修正。

WickedPdf.config = {
  # 本番環境のみの処理
  :exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary-aml'].full_gem_path}/bin/wkhtmltopdf"

  # 開発環境のみの処理
  #:exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary'].full_gem_path}/bin/wkhtmltopdf"
}

開発環境でコメントの切り替えをするときは、サーバーの再起動を忘れずに。

これで、AWSにデプロイはできるようになります。

本番環境(EC2, AmazonLinux)でPDF出力ができない

wicked_pdfwkhtmltopdf-binaryというGemを使ってPDF出力機能を付けていますが、開発環境ではうまく行くのに本番環境ではRuntimeErrorError: PDF could not be generated!のエラーのエラーが発生。

Image from Gyazo

どうやら、wkhtmltopdf をAWSにインストールしなければいけない。(ついでに日本語フォントも)

AWSにwkhtmltopdfをインストール

念の為に CentOS プラットフォームのアーキテクチャを確認しておきましょう。

sshでAWSにログインしておきます。

特にディレクトリを移動せずに以下を実行。

$ arch    
x86_64  

上記のように arch コマンドを実行して「x86_64」と表示されたならば、このサーバはインテル系CPUの 64bit OS 上で動いているという事になります。

次に wkhtmltopdf の最新パッケージ(2020年6月11日 バージョン 0.12.6)をダウンロードします。

あくまでも下記は x86_64 専用のパッケージなので、アーキテクチャが x86_64 でない場合は別のURLになるので注意してください。

$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm

このパッケージを展開する前に、必須フォント xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 をインストールしておきます。

このインストールは yum でOKです。

$ sudo yum install xorg-x11-fonts-75dpi    
$ sudo yum install xorg-x11-fonts-Type1  

これで wkhtmltox を展開できるようになったので、下記実行します。

$ sudo rpm -Uvh wkhtmltox-0.12.6-1.centos7.x86_64.rpm    
Preparing...                          ################################# [100%]    
Updating / installing...    
   1:wkhtmltox-1:0.12.6-1.centos7     ################################# [100%]

これで、インストール完了です。

$ wkhtmltopdf -V    
wkhtmltopdf 0.12.6 (with patched qt) 

libpng12が無いとエラーに書いてあるのでインストール

$ sudo yum install libpng12

もしくは、

$ sudo yum install libpng12.so.0

これで、一応インスタンスを再起動して、再度サイトを確認すると本番環境でのエラーが消えてPDF出力できました!

最後に日本語化も忘れず

$ cd /usr/share/fonts
$ sudo yum install -y ipa-gothic-fonts ipa-mincho-fonts

これで日本語フォントもインストール完了です。

他にもこんな記事があります!