前提・実現したいこと
人数が多い名簿のPDFを動的に作成し、ダウンロードさせたいのですが、
名簿人数が3,000名を超えると、30秒以上かかり、サーバー(heroku)がタイムアウトしてしまいます。
※クラウドファンディングのようなウェブアプリを公開しています。
企画を作成したユーザーがPDF生成ボタンを押すと、データベース上のサポーター(賛同者)の名簿PDF生成することができるアプリです。
大きなファイルを早くダウンロードさせるにはどうすればよいでしょうか?
バックグラウンド処理的なことをやればよいのでしょうか?
調べても実装のイメージが全く見えず・・・。プロの皆さまにご指示を仰ごうと思います。
当方、初心者ですが、、、実アプリでエラーがでてしまい大変困っております????
どなたか、お助け下さい( ;∀;)
どうぞよろしくお願い致します・・・。
PDF作成コントローラー
def create_pdf @supporters = Supporter.where( event_id: params[:event_id], activation: 1, agreement: 1).pluck(:name, :email, :created_at) @event = Event.find(params[:event_id]) respond_to do |format| format.html format.pdf do pdf = CreatePdf.new(@supporters,@event) send_data pdf.render, filename: 'supporters_list.pdf', type: 'application/pdf', disposition: 'inline' # 画面に表示 end end end
試したこと
PDF作成ツールはPrawnを使用しており、3000名弱ぐらいまでは問題なく動きます。
データベース読み込みを早くするために、whereに、pluckの追記を行ったところ、
エラーの限界が2500名だったところが3,000名までアップしました。
しかし、10万人規模に耐えさせたいと考えており、そこまでは大変ハードルが高い状態です。
良い方法はないものでしょうか・・・?
尚**、3000名程度ですとファイルサイズは4.5MB程度**です。