事象
こちらの記事を参考にActive Storageの動画アップロードと再生ができるアプリ(rails version: 6.1)を作成したところ、
最初はアップロードした動画が再生できるが、5分くらい時間が経つと動画再生できなくなった。
動画ファイルを取得しに行こうとした時にエラーになっているようだった。
原因
↑こちらの記事にあるように
Active Storageでは有効期限付きの一時的なURLを返していて、5分経つとURLが変わってしまう。
本来であれば
/rails/active_storage/blobs/redirect/~~~~~
(※参考のサイトを参照)
でblobに問い合わせし、最新のURLを問い合わせの都度レスポンスしてもらえるはずだが、
キャッシュの影響でこれに問い合わせせず、古いURL(期限が切れてる)を取りに行こうとするのが原因らしい。
解決方法
先ほどの記事にもあったが、6.1からは永続的なURLが設定出来るようになり、
これによりURLが変わる事なく常に同じになる(EC2に対するEIPのみたいに)。
やり方はconfig/storage.ymlにpublic: true
を記述する。
local:
service: Disk
root: <%= Rails.root.join("storage") %>
public: true
これによりblobへの問い合わせをskipしてもURLは変わらないので、
5分経っても動画ファイルが取得できる。
参考