【问题标题】:Sidekiq job railsSidekiq 工作轨道
【发布时间】:2020-02-25 06:05:51
【问题描述】:

我在后台运行一些函数,但现在我不想在后台运行这些函数,因为 perform 函数只返回一个作业 ID 我想显示错误消息,为什么特定作业失败。是否可以显示 sidekiq 作业失败的错误消息。

【问题讨论】:

  • 这不是异步作业处理器的工作方式。它们是从共享代码库运行的两个独立应用程序;如果它们是单独的应用程序,它们将如何通信?如果您的 Rails 应用程序等待 Sidekiq 的响应,它会如何异步?典型的做法是让您的异步作业将一些返回值写入数据库,但如何从 Rails 读取这些值取决于您自己。如果您想通过在 Rails 中直接同步运行作业来获取作业的返回状态,您可以运行 Worker.new.perform(但这不是异步的)
  • 其实我的问题是如何将消息从工人返回到控制器方法?
  • 你不能从异步工作者返回任何东西给 Rails。不是它是如何工作的。如果您需要执行一些逻辑并将其返回到您的控制器操作,那么要么执行 Worker.new.perform 以同步运行它,要么将该代码移动到代码库的其他部分。 (这更有意义,因为如果它不打算异步运行,那么它不应该是 Sidekiq 工作人员)如果这对您没有意义,那么请提供代码示例,更清楚地解释您如何使用给定代码。
  • 是的,现在我写了一个问题,他们正在调用该函数。谢谢@anothermh

标签: ruby-on-rails ruby


【解决方案1】:

在某些方面是可能的(我只做过 2 个):

  1. 您为后台作业创建一个日志文件 -> 如果只有管理员/开发人员可以阅读作业失败的原因,这很合适;

  2. 您在数据库中记录状态 -> 如果您希望用户查看他们的事务是否成功,这很合适,但请记住 backgroundjob 正在异步运行。您可以显示作业失败的原因,但不能实时显示。用户可以在 index 或 show 中看到它,这取决于您的业务模式。

无论哪种方式,您都必须使用rescue

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多