gpt4 book ai didi

ruby-on-rails - 如何处理来自 Rails 应用程序的带有多个大附件的传入电子邮件?

转载 作者:行者123 更新时间:2023-12-04 03:39:02 24 4
gpt4 key购买 nike

我需要设置一个可以接受传入电子邮件的 Ruby/Rails 应用程序,电子邮件的正文将被忽略,每封电子邮件将包含一个或多个最大附件(图形),最大为 20MB,该应用程序将收到大约每小时 10-20 封这样的电子邮件。

我需要使用自定义电子邮件地址/域。

电子邮件的快速处理不是一个重要的优先事项,但是每封电子邮件应该在到达后最多 5 分钟内得到处理。

我正在考虑将所有电子邮件从我的 info@mydomain.com 邮件帐户自动转发到 GMail 收件箱,然后让 Rails lib 脚本使用 MMS2R 和 TMail 访问 GMail,下载任何新邮件并将它们添加到邮件队列(延迟作业),此脚本将由 cron 作业每分钟调用一次。

这个解决方案只是“闻起来不对”,我会担心它的扩展能力;我不想在每次运行 cron/脚本时加载整个 Rails 堆栈。

有人有在 Rails 中处理传入邮件和附件的经验吗?

最佳答案

如果您主要关心的是每分钟加载 rails 环境以运行脚本,我建议使用 mailgun 以及一些 cron 替代方案。

我使用 bluepill 的组合+ clockwork + delayed_job来处理这个。我有自定义作业,排队就像 Delayed::Job.enqueue MyJob.new 一样简单。逻辑在作业的 perform 方法中捕获,这有助于最大限度地减少依赖性(如果有的话)。

clockwork 用于将延迟的作业排入队列,只加载最少的依赖项,从而保持内存占用最小。

bluepill 用于监控延迟的 worker 和 clockwork 进程,并在它们失败时重新启动它们,或者在它们失控时重新启动它们。

一般内存使用:20MB(bluepill) + 25MB(clockwork) + 80-90MB(delayed worker)

clockwork.rb 示例:

ENV['RAILS_ENV'] ||= "development"
ENV['RACK_ENV'] = ENV['RAILS_ENV']

require 'clockwork'
require 'mongoid'
require 'delayed_job'
require 'delayed_job_mongoid'

include Clockwork

base_directory = File.absolute_path(File.dirname(__FILE__))
require File.join(base_directory, "../jobs/fetch_comments_job.rb")
require File.join(base_directory, "../jobs/news_letter_job.rb")

Mongoid.load!(File.join(base_directory, "../config/mongoid.yml"))

every(1.minute, "pop.comments") { Delayed::Job.enqueue FetchCommentsJob.new}
every(1.day, "send.newsletter", :at => '22:30') { Delayed::Job.enqueue NewsLetterJob.new}

关于ruby-on-rails - 如何处理来自 Rails 应用程序的带有多个大附件的传入电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com