Rails 5.2 を触り始めて、 ActiveStorage で時間制限がある URL しか取得できなかったので、 PUBLIC な URL 取得するためのメモ
Post モデルに、 has_one_attached :image
してる想定
$ bin/rail c
irb(main):001:0> post = Post.first
irb(main):002:0> post.image.attachment.service.send(:object_for, post.image.key).public_url
=> "https://your-bucket-name.s3.ap-northeast-1.amazonaws.com/dfadadfDEfadfadfaf"
これで URL が取得できます
ただ、これだけだとプライベートなファイルのままで、ブラウザで開いても、表示されないので、 ココが一番のポイント
S3 側のバケットポリシーを変更します
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
そうすると、上の URL で表示されるようになります!