【问题标题】:Queued jobs are somehow being cached with Laravel Horizon using SupervisorLaravel Horizo​​n 使用 Supervisor 以某种方式缓存排队的作业
【发布时间】:2019-12-27 14:58:36
【问题描述】:

我的应用程序发生了一件非常奇怪的事情,我真的很难调试它,并且想知道是否有人有任何想法或类似的经历。

我有一个在 Laravel v5.8 上运行的应用程序,它使用 Horizo​​n 在 Ubuntu 16.04 服务器上运行排队的作业。我有一个功能可以存档一个传递到队列的帐户。

我注意到它似乎没有工作,尽管在本地工作并且已经通过了该功能的测试。

我最后一次调试尝试是注释掉整个 handle 方法并添加 Log::info('wtf?!'); 以查看它是否可以正常工作,事实上,它仍在尝试运行注释掉的代码。我决定重新启动主管并再次尝试。最后,我设法得到'wtf?!写入我的日志。

此后,我必须重新启动主管才能部署我的代码,以便它识别“新”代码。

Horizo​​n 是否以任何方式缓存作业?我在文档中看不到任何内容。

有没有人经历过这样的事情?

关于如何不必每次都重新启动主管有什么想法吗?

谢谢

【问题讨论】:

    标签: laravel


    【解决方案1】:

    如文档here中所述

    请记住,队列工作者是长期存在的进程,并将启动的应用程序状态存储在内存中。因此,它们在启动后不会注意到您的代码库中的更改。因此,在您的部署过程中,请务必重启您的队列工作器。

    或者,您可以运行 queue:listen 命令。使用 queue:listen 命令时,您不必在代码更改后手动重启 worker;但是,此命令不如 queue:work: 高效:

    正如 Horizo​​n 文档中的 here 所述。

    如果您将 Horizo​​n 部署到实时服务器,您应该配置一个进程监视器来监控 php artisan horizo​​n 命令并在它意外退出时重新启动它。在将新代码部署到服务器时,您需要指示 Horizo​​n 主进程终止,以便进程监视器可以重新启动它并接收您的代码更改

    当你重新启动supervisor时,你基本上是在重新启动命令并加载新代码,你的行为完全符合预期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2017-06-28
      • 2018-05-29
      相关资源
      最近更新 更多