清除生产中延迟作业的工作缓存

时间:2015-01-08 14:52:23

标签: ruby-on-rails delayed-job

我在rails应用程序中使用delayed jobs。它工作正常,但生产服务器上出现问题。我在lib中创建了一个类,并从控制器调用它的方法,通过延迟的作业生成一个csv文件。当我在本地和生产服务器上运行延迟的作业时工作正常,但后来我对此类进行了一些更改以获得文件命名约定,并在本地然后在生产服务器上重新启动延迟的作业。现在,当我通过延迟作业调用该方法时,它根据我对类所做的最新更改工作,有时它使用文件命名约定的旧逻辑。 可能是什么问题?

3 个答案:

答案 0 :(得分:0)

延迟作业有一个隐藏的“功能”,即忽略对您的应用的任何更改,只使用旧设置,环境变量,电子邮件模板等。您可以清除每个缓存并重新启动服务器,它仍然保留应用程序代码库中不再存在的数据。

delayed_job - Performs not up to date code?

另请注意,DJ的“重启”并不总能杀死并重新启动所有工作人员,所以你需要将它们追捕并用手动杀死它们

ps aux | grep delay  

请参阅:Rails + Delayed Job => email view template does not get updated

我还没有找到“清除延迟作业缓存”功能。如果它存在,有人请在这里发布。

答案 1 :(得分:0)

就我而言,我只花了近4个小时的时间尝试一切尝试删除 Heroku 中失败的delayed_jobs。如果您到达这里试图杀死僵尸delayed_job,但是您在Heroku中,则将无法使用

您不能像在常规服务器中那样执行ps aux,也不能rake jobs:clear,并且,如果您通过Rails控制台进行检查,则会在其中看到作业,但不能在数据库中,因此您也无能为力。

我所做的就是将应用程序置于维护模式,进行了一次部署,完全卸载了delayed_job gem及其所有引用,然后进行了另一次部署以还原该更改。清除了僵尸缓存,就成功了。

答案 2 :(得分:0)

我在Dokku中遇到了类似的问题。我的解决方案是从我的DOKKU_SCALE文件中删除worker=1项(因此它包含的全部为web=1),并从我的Procfile中删除worker: bundle exec rake jobs:work行。

我将其推送到生产服务器,撤消了上面的更改,再次推送并修复了该问题。