【问题标题】:Clear worker cache in delayed jobs in production清除生产中延迟作业中的工人缓存
【发布时间】:2015-01-08 14:52:22
【问题描述】:
我在我的 Rails 应用程序中使用delayed jobs。它工作正常,但生产服务器上出现问题。我在 lib 中创建了一个类,并从控制器调用它的方法,以通过延迟作业生成一个 csv 文件。当我在本地和生产服务器上运行延迟的作业时它工作正常,但是我对这个类进行了一些更改以进行文件命名约定,并在本地和生产服务器上重新启动延迟的作业。现在,当我通过延迟作业调用该方法时,它会根据我对类所做的最新更改工作,有时它使用文件命名约定的旧逻辑。
可能是什么问题?
【问题讨论】:
标签:
ruby-on-rails
delayed-job
【解决方案2】:
在我的例子中,我花了将近 4 个小时尝试一切以删除 Heroku 中失败的 delayed_jobs。如果您来到这里试图杀死僵尸 delayed_job,但您在 Heroku,这将不起作用。
你不能像在普通服务器上那样做ps aux,也不能做rake jobs:clear,如果你通过Rails控制台检查,你会看到那里的工作,但在数据库中看不到,所以你也无能为力。
我所做的是将应用程序置于维护模式,部署完全卸载 delayed_job gem 及其所有引用,然后另一个部署恢复该更改。这清除了僵尸缓存,并且成功了。
【解决方案3】:
我在 Dokku 也遇到过类似的问题。我的解决方案是从我的 DOKKU_SCALE 文件中删除 worker=1 条目(所以它只包含 web=1),并从我的 Procfile 中删除 worker: bundle exec rake jobs:work 行。
我将它推送到我的生产服务器,扭转了上述更改,再次推送并修复。