Disable stale while revalidate for own avatar

Locally, having stale_while_revalidate works great, but in production when we are behind CloudFlare, this results in an old image being shown after you upload a new one

See: https://app.fizzy.do/5986089/cards/2978
This commit is contained in:
Stanko K.R.
2025-11-21 19:18:19 +01:00
parent 08f13f13f3
commit fe909d6dc5
2 changed files with 11 additions and 2 deletions
+9 -1
View File
@@ -7,7 +7,7 @@ class Users::AvatarsController < ApplicationController
before_action :ensure_permission_to_administer_user, only: :destroy
def show
if stale? @user, cache_control: { max_age: (30.minutes unless Current.user == @user), stale_while_revalidate: 1.week }.compact
if stale? @user, cache_control: cache_control
render_avatar_or_initials
end
end
@@ -26,6 +26,14 @@ class Users::AvatarsController < ApplicationController
head :forbidden unless Current.user.can_change?(@user)
end
def cache_control
if @user == Current.user
{}
else
{ max_age: 30.minutes, stale_while_revalidate: 1.week }
end
end
def render_avatar_or_initials
if @user.avatar.attached?
send_blob_stream @user.avatar
@@ -8,7 +8,8 @@ class Users::AvatarsControllerTest < ActionDispatch::IntegrationTest
test "show self without caching" do
get user_avatar_path(users(:david))
assert_match "image/svg+xml", @response.content_type
assert_nil @response.cache_control[:max_age]
assert @response.cache_control[:private]
assert_equal "0", @response.cache_control[:max_age]
end
test "show other with caching" do