

rails で、 pdf ダウンロードを実装しようとしています。

この pdf は、以下の処理によって生成される想定です。

  1. テンプレート pdf0
  2. prawn によって生成される pdf1
  3. [combine_pdf](https://github.com/boazsegev/combine_pdf) で生成される pdf2 == pdf0 + pdf1
  4. pdf2 を send_file

このように実装をするとき、おそらく、 pdf1 と pdf2 は動的にファイルを生成する必要がありそうだ、と思っています。

pdf ファイルを動的に生成するということは、 rails はウェブアプリケーションなので、同期(排他制御)の問題がでてくるかと思っています。

### 質問

  * pdf ダウンロード機能実現のために、生成される中間・最終 pdf ファイルをサーバーのどこかに保存しておきたいと思っています。これは、ダウンロードが完了すればそれ以上必要のないファイルです。このようなファイルは、どこに生成しておくのが、 rails 的には良いのでしょうか?


CC BY-SA 4.0
2018-07-15T04:58:51.973
46624
2018-07-16T08:05:32.647
754
question
ruby-on-rails
rails で、 send_file するための一時的な pdf ファイルの置き場


> ダウンロードが完了すればそれ以上必要のないファイルです。このようなファイルは、どこに生成しておくのが、 rails 的には良いのでしょうか?

1つの物理サーバーにrailsアプリを載せるようなシンプルな構成であれば、`Rails.root`直下の`tmp`で良いと思います。

ただ、railsアプリの新しいバージョンのdeploy後(`Rails.root`全体が切り替わった場合)も生成済のファイルをダウンロード可能としたいのであれば、OS側の容量の許すディレクトリ(linuxの場合`/tmp`や`/var/tmp`、または、railsアプリ専用ディレクトリ)に生成すれば良いと思います。

また、複数の物理サーバーにrailsアプリを載せるような構成の場合は、物理サーバー間で共有できるディレクトリに生成する必要があると思います。(クラウドであれば、`S3`などに格納し、`send_data`を使ってダウンロードする)

いずれにしても、非同期にファイルを生成する方式に何を採用するかは不明ですが、生成したファイルのパスが一意になるようにする必要があると思います。


CC BY-SA 4.0
2018-07-15T09:35:10.817
46629
2018-07-16T08:05:32.647
2018-07-16T08:05:32.647
3271
46624
answer