Techioz Blog

Railsを使用して添付されたExcelファイルをキャッシュするにはどうすればよいですか?

概要

has_one_attached :file という製品モデルがあります。

製品が作成されると、Excel ファイルが添付されます。通常、Excel ファイルは、製品が作成されてから 1 時間以内に別のプロセスによって再度アクセスされる必要があるため、このファイルをキャッシュして、1 時間以内に再度ダウンロードする必要がないようにすることが賢明であると考えました。

現在、添付ファイルに次のようにアクセスしています。

product.file.open do |file|
  ...
end

しかし、それが発生すると、サーバー ログに次の情報が記録されます。

S3 Storage (1320.9ms) Downloaded file from key: arxnfly66hk6imt7ksa6w1w16

キャッシュ手法はたくさんありますが、どれがこれに適しているのかわかりません。

私は次のようなことを試しました:

product.file.open do |file|
  Rails.cache.write(cache_key, file.read, expires_in: 1.hour)
end

しかし、これはうまくいかないようです。 file.read は非常に長い文字列を返しますが、Excel ファイルに変換する方法がわかりません。どちらの方法でも Rails.cache.read(cache_key) を実行すると nil が返されます。

誰かが私に正しい方向を教えてくれれば、本当に感謝します。

解決策

これを行うための最良の方法はわかりません。 通常、ファイルを tmp フォルダーに保存し、1 時間後に削除するジョブを作成します。

キャッシュを使用したい場合は、次を使用できます

File.open(<filename>, "w+") do |f|     
  f.write(Rails.cache.read(cache_key))   
end