Rails 4:延迟作业保留电子邮件 "from" header 值的缓存

Rails 4: Delayed job keep cache for email "from" header value

我正在 Rails 上的 Ruby 中开发邮件 Web 应用程序,我遇到了 delayed_job gem:

的问题

在我的应用程序设置中,我允许客户更新发送邮件的电子邮件地址。但我发现 delayed_job 中有类似缓存的内容,它不使用 « from » header.

的更新电子邮件地址

当我手动使用 Capistrano 的 delayed_job 任务时,它起作用了,所以我尝试在我的模型中添加一个回调 after_update 来处理 delayed_job 的重启,但没有成功。

Capistrano 命令:

cap <my_env> delayed_job:restart # this works but it’s a manual command so useless in my case

我尝试的是从模型动态重启delayed_job:

class Setting < ActiveRecord::Base
  after_save :restart_delayed_job

  def restart_delayed_job
    if email_changed?
      system "RAILS_ENV=#{Rails.env} do bundle exec bin/delayed_job -n 1 restart"
    end
  end
end

我的邮件 class:

class MyMailer < ApplicationMailer
  default from: Setting.first.email # After updating the email value in setting, it still the old one used.
  # more code skipped
end

有谁知道如何从 Rails 重新启动 delayed_job 吗?
有没有办法只在 Ruby 中完成它而无需编写 shell 脚本?
为了帮助我更好地理解,是否有多个 delayed_job 实例(服务器中的一个网站)或一个用于所有网站?

感谢您的帮助!

我的项目:
- Rails 4.2.5
- Ruby 2.2.2
- ActiveAdmin 1.0.0 pre2
- 延迟作业 4.1.1
- Capistrano 3.4.0

解决方案是将 from header 移动到 mail 函数中。 原因是默认的 from 只在应用程序启动时设置一次,不能这样更改。

mail(from: email, subject: subject, ...) do
  # skipped code
end

这是帮助我理解的答案:https://github.com/collectiveidea/delayed_job/issues/882