【问题标题】:Clear worker cache in delayed jobs in production清除生产中延迟作业中的工人缓存
【发布时间】:2015-01-08 14:52:22
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails delayed-job


    【解决方案1】:

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

    delayed_job - Performs not up to date code?

    另外请注意,DJ 的“重启”并不总是杀死并重启所有工作人员,因此您需要手动追捕并杀死他们

    ps aux | grep delay  
    

    见:Rails + Delayed Job => email view template does not get updated

    我还没有找到“清除延迟的作业缓存”功能。如果存在,请在此处发布。

    【讨论】:

      【解决方案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 行。

        我将它推送到我的生产服务器,扭转了上述更改,再次推送并修复。

        【讨论】:

          猜你喜欢
          • 2011-10-12
          • 2016-10-10
          • 2011-09-05
          • 2012-02-11
          • 2011-08-26
          • 2011-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多