이 문제를 조사해 본 결과, discourse-narrative-bot이 인증서에 포함할 사용자의 아바타를 가져오는 과정에서 블로킹이 발생하는 것 같습니다. 관련 코드는 여기 있습니다:
respond_to do |format|
format.svg { render inline: svg }
end
end
end
private
def fetch_avatar(user)
avatar_url = UrlHelper.absolute(Discourse.base_path + user.avatar_template.gsub('{size}', '250'))
FileHelper.download(
avatar_url.to_s,
max_file_size: SiteSetting.max_image_size_kb.kilobytes,
tmp_file_name: 'narrative-bot-avatar',
follow_redirect: true
)&.read
rescue OpenURI::HTTPError
# Ignore if fetching image returns a non 200 response
end
end
end
이 포럼은 SSO를 사용하며 아바타는 Amazon S3 URL을 사용합니다. Amazon의 S3는 빠르고 속도 제한이 없습니다. 그러나 해당 함수는 다음과 같은 형태의 아바타 URL을 가져오고 있습니다:
https://forum.tld/user_avatar/forum.tld/username/240/18705_2.png
인증서 생성을 늦추고 있는 타임아웃 오류는 Discourse의 속도 제한 과 관련이 있을까요? Discourse 인스턴스 _자체_에서 아바타를 너무 빠르게 요청하거나, 여러 사용자가 봇 튜토리얼을 수행하는 동안 Amazon S3에 너무 빠르게 접근하려고 해서 그런 것일까요?