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
我正在 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