从 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
}
我有一个带有 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
}