많은 에셋이 랜덤으로 500 오류 반환

처음에는 Cloudflare 최적화 문제일 것 같다고 추측했습니다. Rocket Launcher가 비활성화되어 있는지 확인해 보세요(아마 비활성화되어 있겠지만, 점검해 볼 가치가 있습니다).

또한, 현재 사용 중인 하드웨어를 계속 사용하려면 S3 버킷 객체 저장을 Cloudflare R2로 구성하는 것이 좋을 것 같습니다.

채팅에서 이 문제가 발생하기 직전에 기부받은 오래된 SSD를 설치했다고 말씀하셨는데, 이것이 결정적인 단서입니다. Dell 펌웨어에서는 드라이브가 불량이라고 표시하지만, smartctl에서는 정상으로 표시됩니다. Dell 펌웨어가 오렌지색으로 깜빡이는 이유는 높은 지연 시간과 불규칙한 I/O 응답, 또는 지원되지 않는 펌웨어를 감지하기 때문일 것입니다. Discourse는 수십 개의 컴파일된 JavaScript 파일을 정확히 동시에 읽으라고 드라이브에 요청하는데, 오래되고 지원되지 않는 SSD는 이러한 갑작스러운 I/O 버스트에 대응하지 못하고 막힐 수 있습니다. 저장 컨트롤러는 데이터를 가져오려다 정확히 30초 후 타임아웃됩니다. 이는 일반적인 기본 SCSI/블록 디바이스 타임아웃입니다.

드라이브가 30초 동안 멈추기 때문에, Discourse의 Rails/Nginx는 파일을 가져오려다 충돌하거나 타임아웃되어 500 에러를 발생시킵니다. Cloudflare는 이 500 에러를 포착하고 잘못된 헤더를 적용하여 브라우저로 전달하므로, 여러분이 보고 있는 NS_ERROR_CORRUPTED_CONTENT가 발생합니다.

해당 SSD를 교체하거나, 반드시 사용해야 한다면 Discourse 자산과 업로드 파일을 객체 저장소 버킷으로 오프로드하여 하드웨어 병목 현상을 우회하세요. Cloudflare R2의 무료 S3 호환 버킷을 사용할 수 있습니다(저도 사용하고 있으며 잘 작동합니다). 이렇게 하면 웹 자산을 위해 실패하는 SSD에서 수천 개의 작은 파일을 읽을 필요가 없게 됩니다.