확장 프로그램이 "알 수 없음"이라 새 서버로 이동 시 사용자 아바타 생성이 되지 않음

수정: 이 문제를 버그로 재분류합니다. 저보다 이 문제를 더 잘 이해하는 누군가가 살펴볼 수 있도록 하기 위해서입니다.

여러 업로드 파일의 확장자가 "unknown"으로 표시되어 있었습니다. 이는 섬네일 생성이 불가능하다는 뜻입니다. 백업을 새 사이트로 이동한 후 섬네일을 다시 생성해야 하는 상황에서 이런 일이 발생했다고 생각합니다.

확장자가 'unknown’인 상태에서 섬네일 생성을 시도할 때, 확장자를 교체하는 것이 적절할 것 같습니다. 예를 들어 다음과 같이요:

 upload.extension = upload.original_filename.split('.').last

이런 처리가 어딘가에서 이루어졌다면, 이 문제에 4시간을 허비하지 않았을 텐데 말입니다.

잠깐. 이게 문제인 것 같습니다. 파일명에서 확장자를 가져오지 않고 왜 false를 반환하는 걸까요?

상세한 내용은 아래와 같습니다.

백업과 복원을 수행하여 사이트를 /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개의 좋아요

Sidekiq에는 누락된 아바타를 생성하는 트리거가 있습니다.

시간이 좀 걸리겠지만, 제가 잘못 알고 있지 않다면 도움이 될 것입니다.

2개의 좋아요

좋네요! 그 코드는 User.refresh_avatar를 호출하지만, 안타깝게도

  user=User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

도 이 문제를 해결하지 못합니다.

2개의 좋아요

힌트가 하나 있습니다:

ActionController::RoutingError (No route matches [GET] "/user_avatar/community.example.com/broken_user")
1개의 좋아요

사용자가 계정에 로그인할 때 업데이트를 수행합니까?

그렇게 생각하지 않습니다.

user.user_avatar.custom_upload에는 올바른 URL이 포함되어 있지만, https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png에는 누락된 아바타 이미지가 있습니다. 이러한 아바타 썸네일을 다시 생성하는 방법을 찾아야 합니다.

로그인 코드에서 force_avatar_update를 확인했습니다.

이것은 매우 유용할 수 있으며, 작업(job)처럼 보입니다.

무언가 잘못되었습니다:

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개의 좋아요

이건 진짜 버그인 것 같고 제프가 :heart:를 눌렀는데, 더 이상의 관심은 받지 못하고 있어요.

내가 이상한 건지, 여기 뭔가 잘못된 건지?

2개의 좋아요

/community에서 community.example.com으로 백업 및 복원을 통해 사이트를 이동했습니다

우리가 복원 과정에서 이런 문제를 겪지 않은 이유는, 여기서 불만 제기하신 것이 복원 산출물(artifacts) 때문인 것 같아서 그렇습니다. 어쩌면 이 특정 백업 및 복원에만 해당하는 문제일까요?

1개의 좋아요