2014-09-11 5 views
0

Я новичок в разработке масштабируемых RoR-приложений, поэтому я надеюсь на предложения о том, как перенастроить/заново настроить следующее. У меня есть приложение RoR, размещенное на Heroku, которое получает входящие письма через Mailgun на контроллер, который затем анализирует электронную почту и загружает их для хранения.RoR: Масштабирование входящей электронной почты с Heroku/Mailgun

Я получаю ошибки таймаута H12-запроса в моих журналах Heroku при попытке обработать электронные письма с несколькими/большими вложениями. Тайм-аут возвращается в Mailgun, который затем пытается повторить запрос с предопределенными интервалами, между тем Heroku продолжает обрабатывать запрос ... поэтому он попадает в цикл, и я завершаю загрузку нескольких файлов в хранилище.

Внутри Heroku У меня есть 1 веб-и 1 рабочая динамо, работаю Puma как мой веб-сервер.

Вот мой puma.rb файл:

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 

Я неясно, как лучше воспользоваться рабочими динамометрических стендах в этой ситуации, и как доложить Mailgun, что все хорошо, так что не пытается выполнить один и тот же запрос.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо за ваше время и помощь.

EDIT Некоторая дополнительная информация:

Мой контроллер делает все обработки. Я запрашиваю базу данных для соответствия входящей электронной почты пользователю. Кроме того, я запрашиваю/отправляю данные стороннему API ... это для получения допустимого токена аутентификации и загрузки данных.

+0

Что вы на самом деле делаете в запросе? Вы утверждаете, что они разбираются и выгружают их? Это действительно происходит, пока запрос открыт? С подобными транзакциями вам необходимо выполнить абсолютный минимум, а затем выполнить тяжелую работу в фоновом работнике, чтобы он вышел из цикла запроса. –

+0

Да, я верю. Рекомендации для/как создать фонового работника? Благодарю. – user464180

ответ

Смежные вопросы