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