저는 Discourse 사이트를 운영하고 있으며, 이 소프트웨어를 얼마나 좋아하는지 말씀드리고 싶습니다. 훌륭한 작업을 해 주신 팀 전체에 감사드립니다. 정말 멋진 도구입니다.
2.5.0 버전으로 업그레이드한 후 큰 문제에 직면했습니다. 문제의 요약과 제가 적용한 임시 해결책은 다음과 같습니다. 이 정보가 향후 버전에서 더 나은 수정으로 이어지기를 바랍니다.
데이터베이스에 있는 일부 주제에 깨진 업로드 파일이 포함되어 있습니다. “S3 업로드” 기능을 사용하다가 실수로 버킷을 삭제해 버렸습니다. 네, 정말 멍청한 실수였지만, 실제로 그렇게 되었습니다. 그 결과 모든 주제 이미지가 사라졌습니다.
많은 이미지를 잃어버린 사실은 차치하더라도, 그 외에는 모든 것이 정상이었으며, Discourse는 존재하지 않는 이미지에 대한 깨진 링크를 표시했지만 시스템 자체는 잘 작동하고 있었습니다.
하지만 2.5.0 버전으로 업그레이드하려 했을 때 문제가 발생했습니다. 로그인한 사용자들은 모두 500 에러를 받았고, 익명 방문자만 웹사이트를 볼 수 있었습니다.
조사해 본 결과, Discourse가 “No such file”(파일을 찾을 수 없음) 에러로 인해 멈추고 있음을 알게 되었습니다. 파일 다운로드를 시도하고 있었던 것 같습니다. /var/www/discourse/app/models/upload.rb 파일에서 local? 메서드를 강제로 true로 설정해야 했고, 그렇게 하니 문제가 해결되었습니다. 하지만 다음 업그레이드를 앞두고 조금 걱정됩니다…
이것은 분명히 새로운 문제입니다. 이전 업그레이드에서는 이러한 문제가 발생하지 않았거든요.
네, 제 log/production.log 파일에는 다음 예외가 기록되어 있었습니다 (Discourse가 비어 있는 S3 버킷에 접근할 때 발생했습니다. 버킷을 다시 생성해 문제를 해결할 수 있기를 바랐습니다).
Started GET “/” for 86.246.127.170 at 2020-05-16 14:29:06 +0000
Processing by ListController#latest as HTML
Creating scope :open. Overwriting existing method Poll.open.
Completed 500 Internal Server Error in 3638ms (ActiveRecord: 0.0ms | Allocations: 135090)
NoMethodError (undefined method path' for nil:NilClass) /var/www/discourse/lib/file_store/base_store.rb:150:in cache_file’
if file.nil?
return
end
FileUtils.cp(file.path, path)
이로 인해 두 번째 오류(최초 게시물에서 언급한 오류)가 발생했습니다:
Started GET “/” for 86.246.127.170 at 2020-05-18 07:37:40 +0000
Processing by CategoriesController#index as HTML
Completed 500 Internal Server Error in 4342ms (ActiveRecord: 0.0ms | Allocations: 60478)
NoMethodError (undefined method path' for nil:NilClass) /var/www/discourse/app/models/upload.rb:193:in fix_dimensions!’
local? 메서드가 true를 반환하도록 강제하여 수정했습니다:
def local?
return true
!(url =~ /^(https?:)?///)
end