2014-09-11 37 views
0

我是设计可缩放的RoR应用程序的新手,因此我希望能够提供有关如何重新配置​​/重新构建以下内容的建议。我在Heroku上托管了一个RoR应用程序,该应用程序通过Mailgun将收到的电子邮件发送给控制器,然后该控制器解析电子邮件并将其上传以供存储。RoR:使用Heroku/Mailgun缩放收到的电子邮件

尝试处理具有多个/大型附件的电子邮件时,我在我的Heroku日志中收到H12-请求超时错误。超时报告返回给Mailgun,然后Mailgun尝试以预定的时间间隔重试请求,同时Heroku继续处理请求...因此它被陷入循环,并且我将多个相同文件上传到存储中。

在Heroku中我有1个网络和1个工作dyno,运行Puma作为我的web服务器。

这里是我的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 

我对如何最好地采取这种情况的优势工人DYNOS的,以及如何汇报Mailgun不清楚,一切都很好,使其不会继续尝试相同的请求。

如果您需要更多信息,请让我知道。

感谢您的时间和协助。

编辑 一些额外的信息:

我的控制器是做所有的处理。 我查询数据库以将传入的电子邮件与用户进行匹配。 此外,我正在请求/发送数据到第三方API ......这是为了获得有效的身份验证令牌和上传数据。

+0

你实际上在做什么?你说解析并上传它们?这实际上是在请求打开时发生的吗?通过这样的交易,您需要做到绝对最低限度,然后在后台工作人员中执行艰苦工作,以避免出现请求周期。 – 2014-09-11 11:41:22

+0

是的,我相信我是。建议/如何建立一个后台工作者?谢谢。 – user464180 2014-09-11 12:34:15

回答