ruby-on-rails - 是否可以在 before_enqueue 回调中访问作业的参数?
问题描述
我想在before_enqueue
回调中执行一些初始参数验证,以便在作业入队时如果存在问题,我可以提出问题。
这将允许我立即向用户提供有关问题的反馈,而不是让作业尝试运行、失败,然后以某种方式将反馈提供给用户。
我在 API 文档中看到将作业对象传递给回调,但是从 API 文档和Rails 指南perform
中不清楚如何从该对象获取参数。
解决方案
通过对 REPL 的一些探索,我发现job
传递给回调的对象有一个arguments
访问器,它是一个参数数组。
使用普通参数,它们将按arguments
位置排列在数组中:
class TestJob < ApplicationJob
def perform(arg1, arg2); end
before_enqueue { |job| puts job.arguments }
end
TestJob.perform_later(:foo, 'bar')
# [:foo, "bar"]
使用命名参数,它们位于数组第一个位置的哈希中:
class TestJob < ApplicationJob
def perform(arg1:, arg2:); end
before_enqueue { |job| puts job.arguments }
end
TestJob.perform_later(arg1: :foo, arg2: 'bar')
# [{:arg1=>:foo, :arg2=>"bar"}]
推荐阅读
- php - PHP:可以在同一目录中打开文件但无法在指定目录中打开
- azure - 使用托管标识和基于令牌的登录从 Azure Function 访问 Azure Analysis Services
- matlab - 如何根据键盘响应显示刺激
- python - 带有额外空格的 Python KivyMD MDBottomSheet
- android - Android二进制文件的qemu用户仿真中的段错误
- postgresql - KML 到 Postgis 表
- laravel - 如何在 Laravel 中更改 hasOne 相关表中的值?
- javascript - 如何将字符串附加或添加到对象中的现有属性?
- c# - 如何从数据集中创建邻接矩阵
- c# - 如何在 .net Core 3.1 C# 中开发的 API 的所有 cookie 上设置安全标志