저는 확장 가능한 RoR 앱을 디자인하는 것이 처음이므로 다음을 재구성/재구성하는 방법에 대한 제안이 필요합니다. 나는 메일 링을 통해 수신 이메일을 수신하는 컨트롤러에 헬로우 쿠 (Heloku)에서 호스팅되는 RoR 앱을 가지고 있는데, 컨트롤러는 이메일을 분석하여 저장 용으로 업로드한다.RoR : Heroku/Mailgun을 사용하여 수신 이메일 확장
첨부 파일이 여러 개인 이메일을 처리하려고 할 때 Heroku 로그에서 H12 요청 시간 초과 오류가 발생합니다. 시간 초과는 Mailgun으로 다시보고되고, 요청을 미리 정의 된 간격으로 다시 시도합니다. Heroku는 계속 요청을 처리합니다 ... 그래서 루프에 걸려서 같은 파일을 여러 번 업로드하여 저장소에 저장합니다.
헤로 쿠 안에 내 웹 서버로 푸마를 실행하는 1 개의 웹 및 1 개의 작업 dyno가 있습니다. 여기
내 puma.rb 파일입니다 모두가 잘 것을 내가이 상황에서 작업자 동력계를 활용하는 방법과 Mailgun에 다시보고하는 방법에 제일 불분명 해요preload_app!
min_threads = Integer(ENV['MIN_THREADS'] || 0)
max_threads = Integer(ENV['MAX_THREADS'] || 5)
threads min_threads, max_threads
workers Integer(ENV['WORKER_COUNT'] || 3)
on_worker_boot do
ActiveSupport.on_load(:active_record) do
if Rails.application.config.database_configuration
config = Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || 5
ActiveRecord::Base.establish_connection(config)
end
# ActiveRecord::Base.establish_connection
end
end
그 동일한 요청을 시도하지 않습니다.
추가 정보가 필요하면 알려주십시오.
시간과 협조에 감사드립니다.
편집 몇 가지 추가 정보 :
가내 컨트롤러는 모든 처리를하고있다. 들어오는 전자 메일과 사용자가 일치하도록 데이터베이스에 쿼리합니다. 또한 타사 API에 데이터를 요청/보내고 있습니다 ... 유효한 인증 토큰을 얻고 데이터를 업로드하기위한 것입니다.
요청에서 실제로 무엇을하고 있습니까? 구문 분석하고 업로드 하시겠습니까? 요청이 열린 상태에서 실제로 발생하고 있습니까? 이와 같은 트랜잭션을 사용하면 절대 최소 작업을 수행 한 다음 백그라운드 작업자에서 열심히 수행하여 요청주기를 초과해야합니다. –
예, 저는 믿습니다. 배경 작업자를위한 권장 사항/설정 방법 감사. – user464180