Rails 7 は ActiveStorage の期限切れ URL のサポートを追加します


Rails 5.2 での ActiveStorage の導入により、Rails アプリケーションで添付ファイルをアップロードまたは提供する方法が変わりました.

ActiveStorage により、さまざまなクラウド ストレージ サービスの統合と使用が容易になりました.

添付ファイルを操作しているときに、特定の時間が経過すると URL を期限切れにする必要がある状況によく遭遇します.

以前は、この特定の変更により、サービス URL (以前は service_url と呼ばれていました) を使用して有効期限を設定する必要がありました.

しかし、ActiveStorage にこの変更が導入されたことで、実際のサービス URL を使用または公開することなく、リダイレクト URL 自体で設定できるようになりました.

Rails 7 でのこの最新の追加により、URL は指定された有効期限で期限切れになります.

# Permanent signed URL
url_for(user.registration)
# http://localhost:4000/rails/active_storage/blobs/redirect/ey...a/registration.jpg

# Service URL with default expiration
user.registration.url
# https://rails-blog.s3.amazonaws.com/....&X-Amz-Expires=360

# Service URL with explicit expiration
user.registration.url(expires_in: 5.seconds)
# https://rails-blog.s3.amazonaws.com/....&X-Amz-Expires=5

# Signed URL with expiration
rails_blob_path(user.registration, disposition: "attachment", expires_in: 5.seconds)
# http://localhost:4000/rails/active_storage/blobs/redirect/ey...a/registration.jpg


アプリケーション全体で ActiveStorage URL のデフォルトの有効期限を設定する場合は、

# config/application.rb
module Blog
  class Application < Rails::Application
    config.active_storage.urls_expire_in = 30.minutes
  end
end


または、環境固有の構成ファイル development.rb、production.rb 内.


# config/environments/production.rb
Rails.application.configure do
  config.active_storage.urls_expire_in = 10.minutes # Default: nil
end


ありがとう