我正在用 Ruby on Rails 开发一个邮件 Web 应用程序,我遇到了延迟工作 gem 的问题:
在我的应用程序设置中,我允许客户更新发送邮件的电子邮件地址。但我发现有类似来自delayed_job 的缓存的东西,它不使用更新电子邮件地址作为« from » 标头。
当我手动使用 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 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 重新启动 delay_job ?
有没有办法只在 Ruby 中完成它而无需编写 shell 脚本?
为了帮助我更好地理解,是否有多个延迟作业实例(服务器中的网站一个)或所有网站一个?
谢谢你的帮助 !
我的项目:
- Rails 4.2.5
- Ruby 2.2.2
- ActiveAdmin 1.0.0 pre2
- 延迟工作 4.1.1
- Capistrano 3.4.0