2014-09-11 4 views
0

저는 확장 가능한 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에 데이터를 요청/보내고 있습니다 ... 유효한 인증 토큰을 얻고 데이터를 업로드하기위한 것입니다.

+0

요청에서 실제로 무엇을하고 있습니까? 구문 분석하고 업로드 하시겠습니까? 요청이 열린 상태에서 실제로 발생하고 있습니까? 이와 같은 트랜잭션을 사용하면 절대 최소 작업을 수행 한 다음 백그라운드 작업자에서 열심히 수행하여 요청주기를 초과해야합니다. –

+0

예, 저는 믿습니다. 배경 작업자를위한 권장 사항/설정 방법 감사. – user464180

답변

관련 문제