> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Delayed::Job

[Delayed::Job](https://github.com/collectiveidea/delayed_job) is gemaakt door de uitstekende mensen bij [Shopify](https://shopifyengineering.myshopify.com/) en is een van de populairste background processors voor Ruby en Rails.

De AppSignal-gem detecteert Delayed Job wanneer deze aanwezig is en haakt in op de standaard Delayed Job-callbacks. Er zijn geen verdere acties nodig om de integratie te activeren.

Deze integratie heeft als doel alle verschillende enqueueing-methoden van Delayed::Job te ondersteunen. Voor sommige methoden gelden beperkingen en aanpassingsmogelijkheden.

## Klassen met `#perform`-methoden

<Tip>
  **Let op**: Het rapporteren van jobs via deze methode wordt ondersteund vanaf
  AppSignal Ruby-gem versie 2.11.0.
</Tip>

Delayed Job ondersteunt het enqueuen van jobs op basis van instanties van klassen of structs die naar een `perform`-instantiemethode luisteren, wanneer ze met `Delayed::Job.enqueue` in de wachtrij worden geplaatst. AppSignal gebruikt de klassenaam van het object als actienaam en voegt `#perform` toe aan de actienaam. Een job voor `StructJob` wordt gerapporteerd als `StructJob#perform`.

<CodeGroup>
  ```ruby Ruby theme={null}
  class StructJob < Struct.new(:id)
    def perform
      # Do stuff
    end
  end

  Delayed::Job.enqueue(StructJob.new("id"))
  # Reported as "StructJob#perform"
  ```
</CodeGroup>

Houd er rekening mee dat deze manier van enqueuen geen argumenten ondersteunt, aangezien een volledig object in de wachtrij wordt geplaatst. Job-objecten worden geserialiseerd bij het enqueuen en gedeserialiseerd bij het verwerken. AppSignal leest de status van het gedeserialiseerde object niet. Het argument `id` voor de `StructJob` in het voorbeeld hierboven wordt niet gerapporteerd.

## Jobs die `display_name` gebruiken

Delayed Job staat elke klasse toe om een eigen `display_name` te definiëren. Deze waarde van `display_name` kan interfereren met de rapportage van AppSignal als deze is opgebouwd uit dynamische waarden, zoals de argumenten die aan de job zijn meegegeven.

Als de retourwaarde van de `display_name`-methode geen string in het formaat `ClassName#method_name` retourneert, behandelt AppSignal elke job als een afzonderlijke entiteit, waardoor veel incidenten en meldingen worden aangemaakt. Dit doorbreekt de groepering die AppSignal voor deze jobs uitvoert, met als gevolg dat AppSignal veel unieke variaties van incidenten rapporteert en onbruikbare metrieken in grafieken laat zien.

Definieer een `appsignal_name`-methode die een jobnaam retourneert in het formaat `ClassName#method_name` om dit te voorkomen. Op deze manier worden de jobs weer correct gegroepeerd.

<CodeGroup>
  ```ruby Ruby theme={null}
  class StructJobWithName < Struct.new(:id)
    def perform
      # Do stuff
    end

    # This returns an unique job name, creating new incidents and graphs for each
    # unique job name.
    def display_name
      "StructJobWithName-#{id}"
    end

    # This will group the jobs back to a single entity, allowing incidents
    # and graphs to work properly.
    def appsignal_name
      "StructJobWithName#perform"
    end
  end

  Delayed::Job.enqueue(StructJobWithName.new("id"))
  # Reported as "StructJobWithName#perform"
  ```
</CodeGroup>

## Ondersteuning voor delay-methodaanroepen

Methodeaanroepen die met de delay-extensie in de wachtrij worden geplaatst, worden gerapporteerd met een actienaam die overeenkomt met hoe ze worden aangeroepen.

De argumenten die aan de delayed methode worden meegegeven, worden gerapporteerd als de argumenten voor de job.

<CodeGroup>
  ```ruby Ruby theme={null}
  Post.delay.archive_all("some selector")
  # Reported as "Post.archive_all"

  Post.create(:title => "Post title").delay.send_mail("mail subject")
  # Reported as "Post#send_mail"
  ```
</CodeGroup>

## Ondersteuning voor Delayed::Job.enqueue

<Tip>
  **Let op**: Detectie van jobnamen is toegevoegd in Ruby-gem versie 2.11.0.
</Tip>

Aangepaste job-objecten die met `Delayed::Job.enqueue` in de wachtrij worden geplaatst, worden normaal gerapporteerd, maar de argumenten worden niet gerapporteerd. Een volledig object wordt aan Delayed::Job meegegeven en geserialiseerd naar YAML en terug. We kunnen in dit scenario geen argumenten detecteren.

<CodeGroup>
  ```ruby Ruby theme={null}
  Delayed::Job.enqueue job_object
  ```
</CodeGroup>

## Ondersteuning voor Active Job

De Delayed Job-integratie is compatibel met [Active Job](/ruby/integrations/active-job). Het zal [wachttijden in grafieken](https://appsignal.com/redirect-to/app?to=performance/graphs), wachtrijen en prioriteiten rapporteren als deze op de job zijn ingesteld.

Upgrade naar versie 2.11.0 van de Ruby-gem of nieuwer voor verbeterde ondersteuning.

## Wijzigingen in de integratie

### Wachttijd

In AppSignal voor Ruby-gem 2.3.0 is een wijziging aangebracht in de registratie van wachttijden. In [PR #297](https://github.com/appsignal/appsignal-ruby/pull/297) wordt de starttijd van de job gebruikt in plaats van de aanmaaktijd van de job.

Dit betekent dat de tijd vanaf het moment dat een job is aangemaakt tot het moment waarop deze moet starten, niet langer als wachttijd wordt geregistreerd. Dit voorkomt dat zeer lange wachttijden de wachttijdgrafieken op AppSignal.com vertekenen.

## Voorbeeldapplicaties

Hieronder vindt u een lijst met voorbeeldapps die beschikbaar zijn om de Delayed::Job-integratie mee te testen:

* [AppSignal + Rails 5 + Delayed::Job](https://github.com/appsignal/appsignal-examples/tree/rails-5+delayed_job)
  * Het voorbeeld laat zien hoe u AppSignal opzet met Delayed::Job en Rails. In het `README`-bestand worden alle bekende en geteste methoden voor het enqueuen van jobs vermeld die door AppSignal worden ondersteund.
