2016-02-25 33 views
0

我有一个导轨和nginx的,Postgres的,和美洲狮一个Ubuntu服务器上运行的应用程序4.2.3和我使用Capistrano的部署进行延时工作。我的应用程序的Rails应用程序部署使用服务看似已删除的文件

用户可以发送大量电子邮件进行使用几种不同的电子邮件模板我提供和利用的delayed_job的宝石。最近,我更新了两个电子邮件模板,并且偶尔发现(可能是500次中的20次)电子邮件模板的旧版本将发送出去,而不是当前版本。我梳理了我的应用程序代码,我很满意应用程序中的任何位置都不再存在旧版本的模板。

更重要的是,用户可以通过提供自己的身体文本编辑模板,而且,当一个旧版本的电子邮件模板的发送,它与用户指定了正确的正文发送。就好像在服务器上运行我的应用程序的旧版本,偶尔会发送电子邮件。

是否有可能以某种方式为我使用Capistrano的更新我的部署,旧的应用程序保持运行,有时工作开始关闭delayed_job的队列?虽然Capistrano只保留了我的应用程序的5个最新版本,但它们都没有使用旧的电子邮件模板。因此,如果是这种情况,旧的应用程序将需要完全保存在内存中 - 所以这似乎不可能。

任何人有我可以追求什么想法吗?我很难理解可能导致这种情况的原因(或者甚至可能会出现这种问题)。非常感谢您的帮助!

(PS:电子邮件利用premailer宝石的,虽然我不明白怎么会参与)

+1

是否有可能在delayed_job的进程不会重新启动展开时之间,并运行基于关闭旧代码? – Dharam

+0

@Dharam,我的假设是'delayed_job'进程不包含运行作业所需的所有逻辑,而只是触发当前应用程序在适当的时间运行作业。不过,我现在要研究这个问题。我会回复我发现的。谢谢! – John

回答

0

的这个问题的答案是肯定的,“是否有可能以某种方式为我更新我的部署使用Capistrano,旧的应用程序仍在运行,有时会开始关闭delayed_job队列?“

我很惊讶地发现,当你启动一个​​进程时,它将序列化/保存到内存中完成任务所需的一切。 A.K.A为实际目的保存/创建整个应用程序的新实例。当我将更改推送到我的应用程序时,旧的延迟工作流程没有被正确处理,所以我有20个延迟的工作流程同时进行。大多数情况下,最近延迟的工作流程将接管队列。但是,如果它很繁忙,那么旧的流程将会使用我的应用程序的旧版本,并且开始工作。

要解决,我不得不杀死老延迟工作进程,然后更新我的Capistrano的代码,以确保它不会再次发生的问题。

非常感谢@Dharam领导我沿着正确的方向(这是我花了一段时间后这个答案)

相关问题