배지 이미지 누락 문제

안녕하세요,

배지(badge) 섹션에서 문제가 발생했습니다. 몇 가지 배지를 수정하고 이미지를 추가했는데, 6개월 후에 백업을 복원하니 배지 섹션을 제외한 모든 것이 정상적으로 작동합니다. 세이프 모드(safe-mode)로 로그인하여 모든 플러그인을 비활성화해 보았지만, 여전히 같은 문제가 발생합니다. 배지 섹션의 기본 이름과 이미지로 복원하는 방법은 무엇일까요?

에러가 다음과 같이 표시됩니다.

Message (2 copies reported)

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
app/controllers/application_controller.rb:484:in `serialize_data'
app/controllers/badges_controller.rb:30:in `index'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

Env

HTTP HOSTS: site.com

다른 이미지들은 정상적으로 복원되었나요?

백업에 업로드 파일이 포함되었는지 확인하셨나요?

업로드 파일을 저장하는 데 s3를 사용하고 계신가요? 아니라면 컨테이너에 접속하여 /shared/uploads/default/original/1X 경로로 이동해 보시고, 해당 위치에 파일이 있는지 확인해 주세요.

네, 저는 S3를 사용하지 않고, 백업에 첨부 이미지가 포함되도록 항상 설정해 왔습니다…

지금 제가 찾고 있는 것은 배지 이미지를 초기화하는 방법입니다. 어떻게 하면 될까요?

기본 설정에서는 배지 이미지를 초기화하는 방법을 제가 아는 한 존재하지 않습니다.

제가 먼저 할 일은 이미지가 없는 배지들이 적어도 복원되었는지 확인하는 것입니다. badges 테이블을 확인하면 image_upload 필드에서 이미지의 ID를 가져올 수 있습니다. 그런 다음 uploads 테이블에서 해당 ID를 사용하여 다음과 같이 이미지의 URL을 가져올 수 있습니다:

select url from uploads where id = <badge-upload-id>

URL은 다음과 같은 형태를 띱니다: /uploads/default/original/1X/c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg 그리고 여기서 파일 이름을 추출할 수 있으며, 이 경우 c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg가 됩니다.

그 다음 find나 선호하는 기타 방법을 사용하여 서버에서 이미지가 해당 경로에 있는지 확인할 수 있습니다.

cd /
find . -name c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

이미지가 올바른 경로에 복원되었음을 확인한 후, 문제는 다른 곳에 있으므로 디버깅을 계속 진행할 수 있습니다.

백업의 Discourse 버전과 복원하려는 Discourse 버전이 너무 다른가요?

아마도 커뮤니티의 다른 누군가가 이 문제에 대해 더 잘 알고 있을 수 있습니다.

완벽합니다. 그런데 누락된 배지의 URL이나 이름을 어떻게 알 수 있을까요?

누락된 URL이나 배지 이미지 이름을 어떻게 확인할 수 있는지 방법을 찾지 못하겠습니다.

Discourse Data Explorer 의 지침을 따라 데이터 탐색기 플러그인을 설치하면 배지 테이블을 검사할 수 있습니다. 사용자 정의 배지에 집중하세요.

설치는 완료했지만, 배지 테이블을 찾을 수 없었습니다;

관리자 프로필을 열면 다음과 같은 오류가 발생합니다;

Message

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/users_controller.rb:92:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

Env

HTTP HOSTS: site.com

안녕하세요 @f1r4s
저도 같은 문제를 겪었습니다. 이 문제를 해결하셨나요?

이 문제는 해당 토픽에서 해결된 것 같습니다: