pfaffman
(Jay Pfaffman)
10월 26, 2021, 2:35오후
1
수정: 이 문제를 버그로 재분류합니다. 저보다 이 문제를 더 잘 이해하는 누군가가 살펴볼 수 있도록 하기 위해서입니다.
여러 업로드 파일의 확장자가 "unknown"으로 표시되어 있었습니다. 이는 섬네일 생성이 불가능하다는 뜻입니다. 백업을 새 사이트로 이동한 후 섬네일을 다시 생성해야 하는 상황에서 이런 일이 발생했다고 생각합니다.
확장자가 'unknown’인 상태에서 섬네일 생성을 시도할 때, 확장자를 교체하는 것이 적절할 것 같습니다. 예를 들어 다음과 같이요:
upload.extension = upload.original_filename.split('.').last
이런 처리가 어딘가에서 이루어졌다면, 이 문제에 4시간을 허비하지 않았을 텐데 말입니다.
잠깐. 이게 문제인 것 같습니다. 파일명에서 확장자를 가져오지 않고 왜 false를 반환하는 걸까요?
end
def has_thumbnail?(width, height)
thumbnail(width, height).present?
end
def create_thumbnail!(width, height, opts = nil)
return unless SiteSetting.create_thumbnails?
opts ||= {}
save(validate: false) if get_optimized_image(width, height, opts)
end
# this method attempts to correct old incorrect extensions
def get_optimized_image(width, height, opts = nil)
opts ||= {}
fix_image_extension if !extension || extension.length == 0
opts = opts.merge(raise_on_error: true)
begin
상세한 내용은 아래와 같습니다.
백업과 복원을 수행하여 사이트를 /community에서 community.example.com으로 이동했습니다. 업로드 경로를 다음과 같이 수정했습니다.
RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'
하지만 아바타는 여전히 ‘Gray Man’(기본 프로필 이미지)으로 남아 있습니다.
user.user_avatar.custom_upload.url을 확인하고 해당 URL을 브라우저에 붙여넣으면 원하는 아바타가 정상적으로 표시됩니다. 사용자를 다시 “bake”(처리)해야 하는 것 같습니다.
아마도
rake avatars:refresh
또는
rake avatars:clean
명령어가 문제를 해결할 줄 알았지만, 소용이 없었습니다.
무엇을 놓치고 있는 걸까요?
1개의 좋아요
IAmGav
(Gavin Perch)
10월 26, 2021, 2:41오후
2
Sidekiq에는 누락된 아바타를 생성하는 트리거가 있습니다.
시간이 좀 걸리겠지만, 제가 잘못 알고 있지 않다면 도움이 될 것입니다.
2개의 좋아요
pfaffman
(Jay Pfaffman)
10월 26, 2021, 2:49오후
3
좋네요! 그 코드는 User.refresh_avatar를 호출하지만, 안타깝게도
user=User.find_by_username('broken_avatar_guy')
user.refresh_avatar
도 이 문제를 해결하지 못합니다.
2개의 좋아요
pfaffman
(Jay Pfaffman)
10월 27, 2021, 12:30오후
4
힌트가 하나 있습니다:
ActionController::RoutingError (No route matches [GET] "/user_avatar/community.example.com/broken_user")
1개의 좋아요
IAmGav
(Gavin Perch)
10월 27, 2021, 12:51오후
5
사용자가 계정에 로그인할 때 업데이트를 수행합니까?
pfaffman
(Jay Pfaffman)
10월 27, 2021, 12:54오후
6
그렇게 생각하지 않습니다.
user.user_avatar.custom_upload에는 올바른 URL이 포함되어 있지만, https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png에는 누락된 아바타 이미지가 있습니다. 이러한 아바타 썸네일을 다시 생성하는 방법을 찾아야 합니다.
IAmGav
(Gavin Perch)
10월 27, 2021, 12:56오후
7
로그인 코드에서 force_avatar_update를 확인했습니다.
IAmGav
(Gavin Perch)
10월 27, 2021, 1:01오후
8
이것은 매우 유용할 수 있으며, 작업(job)처럼 보입니다.
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Jobs::FixOutOfSyncUserUploadedAvatar do
it 'should fix out of sync user uploaded avatars' do
user_with_custom_upload = Fabricate(:user)
custom_upload1 = Fabricate(:upload, user: user_with_custom_upload)
gravatar_upload1 = Fabricate(:upload, user: user_with_custom_upload)
user_with_custom_upload.update!(uploaded_avatar: custom_upload1)
user_with_custom_upload.user_avatar.update!(
custom_upload: custom_upload1,
gravatar_upload: gravatar_upload1
)
user_out_of_sync = Fabricate(:user)
custom_upload2 = Fabricate(:upload, user: user_out_of_sync)
gravatar_upload2 = Fabricate(:upload, user: user_out_of_sync)
prev_gravatar_upload = Fabricate(:upload, user: user_out_of_sync)
This file has been truncated. show original
pfaffman
(Jay Pfaffman)
10월 27, 2021, 6:25오후
9
무언가 잘못되었습니다:
user=User.find_by_username('Tuomo')
upload_id=user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
Discourse.avatar_sizes.each do |size|
OptimizedImage.create_for(upload, size, size)
end
OptimizedImage.where(upload_id: upload_id)
그런데 최적화된 이미지가 하나도 없습니다.
broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
upload.extension = upload.original_filename.split('.').last
upload.save
end
이렇게 하면 해결됩니다.
그다음에는 이렇게 새 썸네일을 생성하기만 하면 됩니다:
has_upload = UserAvatar.where("custom_upload_id > 0")
has_upload.each do |user_avatar|
Jobs.enqueue(:create_avatar_thumbnails,{upload_id: user_avatar.custom_upload_id})
end
2개의 좋아요
pfaffman
(Jay Pfaffman)
11월 10, 2021, 8:00오후
10
이건 진짜 버그인 것 같고 제프가 를 눌렀는데, 더 이상의 관심은 받지 못하고 있어요.
내가 이상한 건지, 여기 뭔가 잘못된 건지?
2개의 좋아요
/community에서 community.example.com으로 백업 및 복원을 통해 사이트를 이동했습니다
우리가 복원 과정에서 이런 문제를 겪지 않은 이유는, 여기서 불만 제기하신 것이 복원 산출물(artifacts) 때문인 것 같아서 그렇습니다. 어쩌면 이 특정 백업 및 복원에만 해당하는 문제일까요?
1개의 좋아요