2016-02-25 5 views
0

У меня есть приложение rails 4.2.3, работающее на сервере ubuntu с nginx, postgres и puma, и я использую Capistrano для развертывания.Развертывание приложения Rails с использованием отложенной работы, казалось бы, удаленных файлов

Пользователи моего приложения могут отправлять массовые электронные письма с использованием нескольких разных шаблонов электронной почты, которые я предоставляю, и используя камень Delayed_Job. Недавно я обновил два шаблона электронной почты, и я обнаружил, что иногда (возможно, 20 раз из 500) отправлена ​​старая версия шаблона электронной почты, а не текущая версия. Я прочел код приложения, и я доволен тем, что старая версия шаблона больше не существует в приложении.

Кроме того, пользователи могут редактировать шаблон, предоставляя свой собственный текстовый текст, а при отправке старой версии шаблона электронной почты он отправляется с правильным текстовым текстом, который пользователь указывает. Это похоже на старую версию моего приложения, работающего на сервере, который иногда командует отправкой электронной почты.

Возможно ли, что как только я обновляю свое развертывание с помощью Capistrano, старый процесс приложения остается включенным и иногда начинает работать с очереди delayed_job? Однако Capistrano сохраняет только 5 самых последних версий моего приложения, и ни один из них не использует старый шаблон электронной почты, который используется. Поэтому, если это так, старый процесс приложения должен быть полностью сохранен в памяти, поэтому это не представляется возможным.

У кого-нибудь есть идеи, которыми я могу заниматься? Я в тупике о том, что может быть причиной этого (или как эта проблема даже возможна). Большое спасибо за любую помощь!

(PS: электронная почта использовать в premailer драгоценного камня, хотя я не понимаю, как это могло быть вовлечено)

+1

Возможно ли, что процесс delayed_job не перезапускается между разворачивает и работает на основе от старого кода ? – Dharam

+0

@Dharam, мое предположение заключалось в том, что процессы 'delayed_job' не содержат всю логику, необходимую для запуска задания, а просто запускают текущее приложение для запуска задания в соответствующее время. Я собираюсь изучить это прямо сейчас, хотя. Я отвечу тем, что найду. Благодаря! – John

ответ

0

Ответа на этот вопрос был утвердительным, «Возможно ли, что-то, как мне обновить развертывание используя Capistrano, старый процесс приложения остается включенным и иногда начинает отработать очередь delayed_job? "

Я был очень удивлен, обнаружив, что при запуске процесса delayed job он сериализует/сохраняет в памяти все необходимое для выполнения своих задач. A.K.A это сохраняет/создает новый экземпляр всего приложения для практических целей. Старые отложенные процессы работы не были должным образом убиты, когда я нажал изменения в моем приложении, поэтому у меня было что-то вроде 20 отложенных процессов работы, идущих одновременно. По большей части самый поздний процесс замедленной работы займет очередь. Однако, если он был занят, старые процессы приступали к работе и запускали работу с использованием старой версии моего приложения.

Чтобы устранить проблему, мне пришлось убить старые процессы замедленной работы, а затем обновить код Capistrano, чтобы убедиться, что это не повторится.

Большое спасибо @Dharam для меня ведет вниз правильный путь (это взяло меня некоторое время, чтобы опубликовать этот ответ)