프로필 설정 404 오류 / 관리자 프로필 작동 안 함

1개월째 이 문제를 겪고 있습니다. 여러 번 업그레이드를 시도하고, 데이터베이스를 새 것으로 마이그레이션하는 등 다양한 방법을 시도해 보았지만 해결되지 않았습니다.

관리자 계정에서 발생한 문제였습니다. 관리자 데이터를 새 것으로 마이그레이션해 보았지만 동일한 문제가 발생했습니다. 설정이나 프로필을 열 수 없고 404 오류가 발생합니다.

동일한 문제를 발견했지만, 해결 방법을 설명하는 내용은 없었고 3년 전의 오래된 게시물이었습니다.

여기서도 동일한 문제가 언급되어 있으며 수정되었다고 하지만, 게시물이 너무 오래되었고 어떻게 수정했는지 설명하는 내용은 없습니다.

이것은 무슨 뜻인가요?

플러그인을 사용하고 계신가요?

/logs에 아무것도 보이나요?

2개의 좋아요

모든 플러그인을 비활성화하고 데이터베이스를 복원했는데도 같은 오류가 발생해요. 도무지 원인을 모르겠어서 여기에 질문을 남깁니다.

작업을 위해 어떤 정보라도 제공해 주셔야 합니다.

2개의 좋아요

로그에 이 내용이 표시됩니다

Job exception: getaddrinfo: No address associated with hostname
2:11 am
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/free
메시지

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/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97: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/request_tracker.rb:198:in `call'

스택 트레이스

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'

환경

HTTP HOSTS: site.com

배지를 비활성화해 보셨나요? 그렇게 하면 문제가 해결될 수 있습니다.

네, 시도해 보았지만 같은 문제가 발생합니다.

이것은 이전에 게시하신 문제와 동일한 것 같습니다. 무엇이 잘못되었는지 파악하는 데 도움이 될 수 있는 추가 정보가 있을 경우를 대비해 다른 주제를 여기에 링크하겠습니다:

100% 이해하고 있는지는 잘 모르겠습니다. 문제가 관리자 화면에 접근할 수 없다는 것인가요?

네, 한 달 전에 이 문제가 있었다는 것을 이전에 언급했었습니다. 많은 방법으로 해결을 시도했지만 모두 실패했습니다.

관리자 화면은 볼 수 있지만, 관리자 프로필이나 설정을 열면 404 오류가 발생합니다.

이것이 커스텀 배지 때문일 수 있다고 생각하시나요? 커스텀 배지를 가진 다른 사용자들도 영향을 받고 있나요? 그렇다면 커스텀 배지를 취소하거나 완전히 삭제해 주실 수 있을까요?

어떻게 취소하거나 삭제하는지 모르겠어요… 시도해 볼 수 있는 가이드가 있을까요?

관리자/사용자 페이지에서 사용자의 배지를 편집/취소할 수 있습니다: (해당 페이지에 접근 권한이 있는 경우)

또는 관리자 영역의 배지 섹션에서 사용자 지정 배지를 삭제할 수 있습니다:

[YourSite]/admin/badges

설정이나 프로필에서 접근할 수 없습니다(404 오류); 그리고 배지 섹션에서는 500 오류가 발생합니다.

Error code: 500 error

데이터베이스 명령줄에서 기본 배지를 복원할 수 있을까요?

Message

Uncaught [object Object]
Url: https://site.com/assets/vendor-3c473d73e5222f7710764282fcc17d73997b7fbd37e0c12afc050b80693ceee2.js
Line: 36
Column: 180628
Window Location: https://site.com/admin/badges

Backtrace



Env

HTTP HOSTS: site.com

Rails 콘솔에서도 배지에 대한 쉬운 ‘초기화’ 옵션은 없다고 생각합니다.

다른 주제에서 권장된 Data Explorer 쿼리는 어느 정도까지 진행하셨나요? 문제를 일으키는 배지 이미지를 찾아내셨나요?

아니요, 제가 안 했어요. 가능하시다면 확인해 주실 수 있나요?

조금 실험해 본 결과, 이 오류(또는 비슷한 문제)를 재현할 수 있었습니다. 콘솔을 사용하여 배지(Badge) 테이블의 image_upload_id에 “null” 값을 입력해 보았는데, 대신 0으로 채워졌습니다. 그 결과, 사용자가 설명한 것과 매우 유사한 방식으로 테스트 사이트가 잠겼습니다.

모든 image_upload_id를 '1’로 변경하여 '수정’했습니다. 덕분에 프로필과 배지 섹션에 다시 접근할 수 있었지만, 이제 모든 배지를 아이콘 전용으로 수동으로 다시 변경해야 하는 등 후처리를 해야 합니다.

사용자의 문제가 비슷한지 확인하려면 데이터 탐색기(data-explorer)에 접근하여 새 쿼리를 만들고 다음 내용을 붙여넣은 후 실행해 보세요:

Select name, image_upload_id
FROM badges b
Order By id desc

콘솔에서 제대로 작동하려면 'null’이 아니라 'nil’을 사용해야 한다는 것도 알아냈습니다. :slightly_smiling_face:

다음 코드를 사용하면 하나씩 수동으로 처리하지 않고도 깨진 항목들을 수정할 수 있었습니다:

Badge.where('image_upload_id=0').find_each do |b|
b.image_upload_id = nil
b.save
end

사용자의 정확한 문제가 무엇인지 알지 못하므로, 이 방법이 사용자의 문제를 동일한 방식으로 해결할 것이라고 단정할 수는 없습니다. 하지만 '모두 nil로 변경’하는 방식이 사용자에게도 효과가 있을 수 있습니다.

1개의 좋아요

@jammydodger 님, 안녕하세요,

음, 저한테 이런 화면이 표시됩니다.

대부분의 배지가 NULL인 것을 확인했는데, 값이 17인 배지는 3개뿐입니다.

그리고 프로필을 다시 확인해 보니 "logs"에 여전히 같은 오류가 발생합니다.

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/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/users_controller.rb:103:in `show_card'
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/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

다른 것을 선택해야 하는 건가요, 아니면 직접 내부 코드를 확인해 주시는 편이 좋을까요?

1개의 좋아요

데이터 탐색기 쿼리로는 문제를 해결할 수 없지만, 쿼리가 제공한 정보로 해결할 수 있을지도 모릅니다. :+1:

rails 콘솔을 사용하는 데 문제가 없다면, 다음 명령을 사용해 해당 17을 null로 리셋해 볼 수 있습니다: (혹시 모를 상황에 대비해 백업을 꼭 가져가세요)

rails 콘솔로 이동하세요:

cd /var/discourse 
./launcher enter app
rails c

아래 내용을 붙여넣으세요:

Badge.where('image_upload_id=17').find_each do |b|
b.image_upload_id = nil
b.save
end

이렇게 하면 hopefully 배지 섹션과 프로필이 잠금 해제되어 처음부터 다시 시작할 수 있을 것입니다. :+1::crossed_fingers:

2개의 좋아요

지식을 쓰고 공유하지 않으면 아무런 가치가 없어, 형! 시간 내줘서 고마워.. 고쳤어!

2개의 좋아요