Jobs::DownloadAvatarFromUrl 타임아웃 발생

안녕하세요,

저희가 discourseconnect를 통해 avatar_url 사용을刚刚开始했습니다. 아바타 오버라이드가 활성화되어 있고 SSO 측에서는 force avatar update가 true로 설정되어 있습니다.

로그인은 의도대로 작동하지만 아바타가 동기화되지 않습니다. SSO 로그인의 verbose 모드를 활성화하면 모든 올바른 파라미터가 표시되지만, Jobs::DownloadAvatarFromUrl에서 항상 "Job exception: execution expired"라는 오류가 발생합니다.

원인이 무엇일지 모르겠습니다. 로컬 Discourse 인스턴스에서 테스트했을 때는 문제없이 작동했습니다(즉, 아바타가 문제없이 다운로드됩니다).

이를 수정하거나 원인을 파악하는 데 도움이 될 아이디어가 있을까요?

현재 Discourse 버전: 2.8.0.beta1

env:


hostname	docker-app
process_id	127
application_version	96fd202d9cdac98196abd952c53f583b4af9d8f2
current_db	default
current_hostname	*correct hostname*
job	Jobs::DownloadAvatarFromUrl
problem_db	default
time	10:58 am
opts	
url	*correct url*
user_id	*correct user id*
override_gravatar	true
current_site_id	default

backtrace:

/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/local/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/local/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/local/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/local/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/local/lib/ruby/2.7.0/net/http.rb:606:in `start'
/var/www/discourse/lib/final_destination.rb:443:in `safe_session'
/var/www/discourse/lib/final_destination.rb:394:in `safe_get'
/var/www/discourse/lib/final_destination.rb:133:in `get'
/var/www/discourse/lib/file_helper.rb:56:in `download'
/var/www/discourse/app/models/user_avatar.rb:98:in `import_url_for_user'
/var/www/discourse/app/jobs/regular/download_avatar_from_url.rb:18:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-3.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.2.1/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.2.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.2.1/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.2.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_retry.rb:112:in `local'
sidekiq-6.2.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq.rb:38:in `block in <module:Sidekiq>'
sidekiq-6.2.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.2.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.2.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_retry.rb:79:in `global'
sidekiq-6.2.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.2.1/lib/sidekiq/logger.rb:11:in `with'
sidekiq-6.2.1/lib/sidekiq/job_logger.rb:33:in `prepare'
sidekiq-6.2.1/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.2.1/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.2.1/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.2.1/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.2.1/lib/sidekiq/util.rb:43:in `watchdog'
sidekiq-6.2.1/lib/sidekiq/util.rb:52:in `block in safe_thread'

수정: RAM과 디스크 공간은 충분합니다. 이미 확인했습니다.

수정2: 실제로 메모리 문제일 수 있습니다. 호스트 머신의 메모리와 Discourse에 할당된 메모리 사이의 차이를 인지하지 못했습니다. 현재 app.yml에서 512MB만 설정되어 있지만, 이것이 원인이 맞는지 여전히 확인해야 합니다.

늦게 업데이트를 올려 죄송합니다.

방금 1024MB와 2048MB의 메모리를 할당하여 테스트해 보았지만 결과는 여전히 동일합니다. 더 많은 조언을 주시면 매우 감사하겠습니다!

수정: 로그를 여러 번 다시 확인한 후, 해당 작업(job)의 코드를 살펴보니 이 작업은 재시도(retry)하도록 의도된 것이 아니었습니다. 당연히, 저는 바로 그 작업을 수행했습니다. 파일을 수정한 후 Sidekiq에서 제 문제가 실제로는 네트워크 관련 문제임을 발견했습니다.
재시도 작업은 다음과 같은 오류를 반환합니다.

Jobs::HandledExceptionWrapper: Wrapped Net::OpenTimeout: execution expired

이 오류는 실제로 작업할 수 있는 형태입니다.

미래를 위해 참고할 점은 다음과 같습니다: Rails 콘솔에서 URI.open(your url).read가 작동하지 않는다면, 이는 Discourse 문제보다는 Ruby 네트워크 문제일 가능성이 높습니다. 이 아이디어는 stackoverflow에서 얻었습니다.