Я разрабатываю почтовый веб-приложение в Ruby On Rails, и я перед вопросом с delayed_job самоцветом:Rails 4: Задержки работы держать кэш для электронной почты «от» значения заголовка
В настройках моего приложения , Я даю возможность клиенту обновить адрес электронной почты, с которого отправляется рассылка. Но я обнаружил, что есть что-то вроде кэша от delayed_job, который не использует адрес электронной почты для обновления для заголовка «from».
Когда я использую задачу delayed_job от Capistrano вручную, это работает, поэтому я попытался добавить обратный вызов 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
Кто-нибудь знает, как я могу перезапустить delayed_job из Rails?
Есть ли способ сделать это исключительно в Ruby без написания сценария оболочки?
Чтобы помочь мне лучше понять, существует ли несколько экземпляров delayed_job (по одному веб-сайту на сервере) или один для всего веб-сайта?
Благодарим за помощь!
Мой проект:
- Rails 4.2.5
- рубин 2.2.2
- ActiveAdmin 1.0.0 pre2
- Задержка работы 4.1.1
- Capistrano 3.4.0