스레드의 단일 또는 여러 게시물을 다른 카테고리의 다른 스레드로 이동하면 http 500 오류가 발생합니다. 관리자 및 관리자 계정, 그리고 단일 게시물 또는 여러 선택된 게시물 모두로 테스트해 보았습니다. 카테고리의 권한 매트릭스:
카테고리
그룹
권한
원본
anybody
see
원본
group01
see reply create
대상
group01
see reply create
관리자와 관리자를 위한 별도의 권한 그룹이 있으며 근본 원인이 복잡한 권한 문제일 것이라고 추정합니다. 이 문제를 디버깅하는 아이디어를 환영합니다
업데이트: 원본 카테고리가 연동(페더레이션, ActivityPub)되어 있습니다. 이 플러그인 코드도 역할을 할 수 있습니다… 관리자와 관리자를 위한 별도의 권한 그룹을 제거하고 ‘표준’ 관리자(Moderator = Yes) 또는 관리자(Admin = Yes) 권한을 가진 두 계정으로 다시 테스트했습니다. 동일한 결과: 새로운 주제, 기존 주제, 새로운 메시지 등 모든 사용 사례에서 오류 500이 나타납니다.
참고: 이 버그는 이전에 여러 번 보고되었고 이미 일부 코드 수정이 있었습니다. 현재 릴리스 2026.3.0-latest에서 우리 인스턴스에서 다시 확인하고 있습니다
1개의 좋아요
이전 게시물에서 아직 해결책을 찾지 못했습니다. 스크린샷을 첨부합니다.
콘솔에는 다음 POST 요청 직후 500 오류가 발생한다고 표시됩니다.
https://forum.netzwissen.de/t/1431/move-posts
[HTTP/2 500 60ms]
이것은 파란색 버튼을 클릭하는 것과 동일한 동작입니다. 이 문제를 좀 더 깊이 디버깅할 수 있는 방법이 있을까요?
Moin
3월 5, 2026, 5:37오후
4
브라우저 콘솔의 네트워크 탭에서 더 유용한 정보가 있는 건가요? 지난 1월 게시글 이동 중 발생한 오류를 해결할 때 저에게 도움이 되었습니다.
Moin:
결국 네트워크 탭에서 다음을 발견했습니다:
1개의 좋아요
… 안타깝게도 그렇지 않습니다. 적어도 이 (압축된) har 파일에서 응답에 유용한 내용은 보이지 않습니다 (165줄 이후의 응답을 참조하십시오).
forum.netzwissen.de_t_1431_move-posts_Archive [26-03-05 22-14-18].har.zip (2.8 KB)
좀 더 깊이 있는 디버깅을 해보았습니다. 컨테이너 내부의 nginx 로그에도 무슨 일이 일어나고 있는지 알 수 있는 유용한 정보가 없습니다.
root@docker5-web-only:/var/log/nginx# tail -f access.log | grep 500
[06/Mar/2026:08:51:45 +0000] "``forum.netzwissen.de``" 10.10.10.21 "POST /t/1431/move-posts HTTP/1.0" "Mozilla/5.0 (X11; Linux x86
_64; rv:148.0) Gecko/20100101 Firefox/148.0" "topics/move_posts" 500 432 "``https://forum.netzwissen.de/t/begehung-quartierszent
rum-mettingen/1431/3" 0.053 0.052 "mainmod" "-" "-" "-" "-" "-" "-"
원인이 어딘가 더 뒤쪽, 예를 들어 postgres의 데이터베이스 요청(우리는 별도의 컨테이너와 전용 postgres 서버를 사용함)에 있을 것 같습니다.
불행히도 이 문제는 아직 해결되지 않았고, 특정 논리나 전제 조건 없이 간헐적으로 발생하고 있습니다. 따라서 재현하기가 어렵습니다.
다시 웹 애플리케이션의 nginx 로그를 확인해 보았지만, 컨테이너 서버 측에서 HTTP 500 에러에 대한 어떤 표시도 찾을 수 없었습니다.
@here 이 문제가 해결될 확률이 55%입니다
main ← fix/move-posts-tombstoned-collection
merged 07:00PM - 19 Jun 26 UTC
### What
Moving one or more posts into a `full_topic` topic could raise
`Active… Record::RecordNotUnique` and surface to the user as an HTTP 500 — from
core's `TopicsController#move_posts`, which only rescues `RecordInvalid` /
`RecordNotSaved`, so anything else becomes a 500.
Reported on Meta: https://meta.discourse.org/t/error-500-when-moving-posts/397654
### Why
ActivityPub records are hidden once tombstoned, via `IdentifierValidations`'
`default_scope { where.not(ap_type: Tombstone.type) }`. The row still exists,
though, and still occupies the unique `(model_type, model_id)` index
(`unique_activity_pub_collection_models`).
The `:first_post_moved` / `:post_moved` handlers check
`!topic.activity_pub_object` — which the default scope reports as `nil` for a
tombstoned collection — and call `create_activity_pub_collection!`, which
blindly inserts a second collection for the same topic and collides on the
unique index.
It's data-dependent (the destination topic's collection must have been
tombstoned previously, e.g. via a delete/restore cycle), which matches the
intermittent, "no visible preconditions" reports.
### How
`create_activity_pub_collection!` now looks the collection up `unscoped`,
restores it when tombstoned, and reuses it instead of inserting a duplicate.
This makes the method idempotent for all of its callers, and preserves the
collection's `ap_id` (its federation identity) rather than orphaning it.
### Tests
- Adds a regression test for moving posts into a topic whose collection was
tombstoned.
- A second commit simplifies the `move_posts` topic specs — collapsing the
per-scenario example fan-out into one example each, with `:aggregate_failures`
on the group. Same coverage, 38 → 14 examples, roughly half the runtime.
3개의 좋아요
완벽합니다, 감사합니다. 이 코드는 ActivityPub 플러그인 코드 일부인 것 같습니다. 이 플러그인이 이미 메인 코드에 번들링되어 있는지 기억이 나지 않네요 (참고: Bundling more popular plugins with Discourse core ). 어쨌든, 다음 빌드/컨테이너 업데이트와 함께 배포될 것이라 이해하면 되나요?
플러그인이 "메인 코드에 포함된다"는 것은 https://github.com/discourse/discourse/tree/main/plugins 아래에 있다는 뜻입니다. 해당 경우, discourse-activity-pub는 메인 코드에 포함되어 있지 않습니다
이 주제는 4일 후 자동으로 닫혔습니다. 더 이상 새 답변을 작성할 수 없습니다.