从 Rails 应用程序组织邮件发送的有效方式

Efficient way of organizaing mail sending from Rails app

我有一个带有 ruby 2.1.2 的 Rails 4 应用程序 运行s 在具有 512 MB RAM 的 VPS 上,我想知道什么是使用尽可能少的额外后台进程(如 Redis 和 Sidekiq,它们中的每一个都需要 运行 作为后台恶魔来有效管理电子邮件通知的方法。

我读过 queue_classic gem,它使用已经存在的相同 Postgres 数据库,并且只添加了一个额外的进程来管理队列。

我有一个系统可以将记录更改的更新发送给相关用户。这是一个 scout 荣誉徽章系统。在第一阶段,用户会产生大量新记录和大量更新。不过过段时间变化就没有那么大了,也就不多了e-mails。我假设第一周每天最多可以有 1000 封电子邮件,之后每周 500 e-mails。

那么有什么选择可以拥有一个简单的后台作业管理系统(比如 queue_classic - 它需要 ruby 1.9.2,所以我不走运)或者一些可以用于免费发送信件(以与 bg 管理器相同的 non-blocking 方式处理应用程序)且 RAM 使用量最少?

sucher_punch and Mandrill(或任何其他类似的)服务可以很好地协同工作。 sucher_punch 不需要单独的进程,可以开箱即用,Mandrill 服务在应用程序之外工作,因此不需要额外的内存或安装。

您需要创建单独的作业来发送电子邮件

class EmailJob
  include SuckerPunch::Job

  def perform(user_id)
    @user = User.find(user_id)
    ::Notifications.some_notification_to(@user).deliver
  end
end

从代码中调用它:

EmailJob.new.async.perform(user.id)

别忘了在里面配置山魈production.rb:

config.action_mailer.default_url_options = { :host => 'example.com' }
config.action_mailer.smtp_settings = {
  address: 'smtp.mandrillapp.com',
  port: SOMEPORT,
  domain: 'example.com',
  authentication: :plain,
  enable_starttls_auto: false,
  user_name: SOMEUSERNAME,
  password: SOMEPASSWORD
}