> ## 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) wurde von den großartigen Leuten bei [Shopify](https://shopifyengineering.myshopify.com/) entwickelt und ist einer der beliebtesten Background-Prozessoren für Ruby und Rails.

Das AppSignal-Gem erkennt Delayed Job, sobald es vorhanden ist, und klinkt sich in die Standard-Callbacks von Delayed Job ein. Es sind keine weiteren Aktionen erforderlich, um die Integration zu aktivieren.

Diese Integration zielt darauf ab, alle verschiedenen Methoden zum Einreihen von Delayed::Job-Jobs zu unterstützen. Einige Methoden können bestimmte Einschränkungen und Anpassungsoptionen aufweisen.

## Klassen mit `#perform`-Methoden

<Tip>
  **Hinweis**: Die Erfassung von Jobs mit dieser Methode wird ab AppSignal
  Ruby Gem Version 2.11.0 unterstützt.
</Tip>

Delayed Job unterstützt das Einreihen von Jobs basierend auf Instanzen von Klassen oder Structs, die auf eine `perform`-Instanzmethode hören, wenn sie mit `Delayed::Job.enqueue` eingereiht werden. AppSignal verwendet den Klassennamen des Objekts als Action-Bezeichnung und hängt `#perform` an den Action-Namen an. Ein Job für `StructJob` wird als `StructJob#perform` gemeldet.

<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>

Beachten Sie, dass diese Methode des Einreihens keine Argumente unterstützt, da ein ganzes Objekt eingereiht wird. Job-Objekte werden beim Einreihen serialisiert und bei der Verarbeitung deserialisiert. AppSignal liest den Zustand des deserialisierten Objekts nicht aus. Das Argument `id` für den `StructJob` im obigen Beispiel wird nicht gemeldet.

## Jobs, die `display_name` verwenden

Delayed Job ermöglicht es jeder Klasse, ihren eigenen `display_name` zu definieren. Dieser `display_name`-Wert kann die Berichterstattung von AppSignal beeinträchtigen, wenn er aus dynamischen Werten erstellt wird, wie zum Beispiel den Argumenten, die dem Job übergeben werden.

Wenn der Rückgabewert der `display_name`-Methode keinen String im Format `ClassName#method_name` zurückgibt, behandelt AppSignal jeden Job als separate Entität, was viele Incidents und Benachrichtigungen erzeugt. Dies durchbricht die Gruppierung, die AppSignal für diese Jobs vornimmt, und führt dazu, dass AppSignal viele einzigartige Varianten von Incidents für den Job meldet und unbrauchbare Metriken in den Graphen anzeigt.

Um dies zu verhindern, definieren Sie eine `appsignal_name`-Methode, die einen Job-Namen im Format `ClassName#method_name` zurückgibt. Auf diese Weise werden die Jobs wieder korrekt gruppiert.

<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>

## Unterstützung für Delay-Methodenaufrufe

Methodenaufrufe, die mit der Delay-Erweiterung in die Warteschlange gestellt werden, werden mit einem Action-Namen gemeldet, der ihrem Aufruf ähnelt.

Die Argumente, die der verzögerten Methode übergeben werden, werden als Argumente für den Job gemeldet.

<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>

## Unterstützung für Delayed::Job.enqueue

<Tip>
  **Hinweis**: Die Erkennung des Job-Namens wurde in Ruby Gem Version 2.11.0 hinzugefügt.
</Tip>

Benutzerdefinierte Job-Objekte, die mit `Delayed::Job.enqueue` eingereiht werden, werden wie gewohnt gemeldet, aber ohne Argumente. An Delayed::Job wird ein ganzes Objekt übergeben und in YAML serialisiert und wieder zurück. In diesem Szenario können wir keine Argumente erkennen.

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

## Unterstützung für Active Job

Die Delayed Job-Integration ist mit [Active Job](/ruby/integrations/active-job) kompatibel. Sie meldet [Queue-Zeiten in Graphen](https://appsignal.com/redirect-to/app?to=performance/graphs), Queues und Prioritäten, wenn sie für den Job festgelegt sind.

Führen Sie ein Upgrade auf Version 2.11.0 des Ruby-Gems oder neuer durch, um die Unterstützung zu verbessern.

## Änderungen an der Integration

### Queue-Zeit

In AppSignal für Ruby Gem 2.3.0 wurde eine Änderung an der Erfassung der Queue-Zeit vorgenommen. In [PR #297](https://github.com/appsignal/appsignal-ruby/pull/297) wurde die Startzeit des Jobs anstelle der Erstellungszeit des Jobs verwendet.

Das bedeutet, dass die Zeit von der Erstellung eines Jobs bis zum geplanten Startzeitpunkt nicht mehr als Queue-Zeit erfasst wird. Dies verhindert, dass sehr lange Queue-Zeiten die Queue-Zeit-Graphen auf AppSignal.com verzerren.

## Beispielanwendungen

Im Folgenden finden Sie eine Liste der verfügbaren Beispielanwendungen, mit denen Sie die Delayed::Job-Integration testen können:

* [AppSignal + Rails 5 + Delayed::Job](https://github.com/appsignal/appsignal-examples/tree/rails-5+delayed_job)
  * Das Beispiel zeigt, wie Sie AppSignal mit Delayed::Job und Rails einrichten. In der `README`-Datei sind alle bekannten und getesteten Methoden zum Einreihen von Jobs aufgeführt, die AppSignal unterstützt.
