Zum Hauptinhalt springen
Jede in einem Rake-Task aufgezeichnete Ausnahme wird an AppSignal gesendet und unter dem Namespace „Background” abgelegt. Beachten Sie, dass wir nur Ausnahmen in Rake-Tasks erfassen. Für Rake-Tasks gibt es kein Performance-Monitoring. (Um Performance-Monitoring manuell in ausgewählte Rake-Tasks zu integrieren, sehen Sie sich bitte unseren Integrationsleitfaden und unseren Leitfaden zur benutzerdefinierten Instrumentation an.) Je nachdem, welche Version des AppSignal-Gems Sie verwenden und in welchem Kontext, sind einige manuelle Schritte erforderlich.

Integrationen

Rails-Anwendungen

Stellen Sie für Rails-Anwendungen sicher, dass Sie vom :environment-Task abhängig sind. Dieser lädt die Rails-Anwendung in den Speicher und startet AppSignal als Teil der Anwendung.
# lib/tasks/my_task.rb
task :my_task => :environment do
  # do stuff
end

Rakefile

Die Rakefile-Datei Ihrer Rails-Anwendung sollte etwa wie im folgenden Beispiel aussehen. Dies sollte bereits der Fall sein, eine Änderung ist nicht erforderlich.
# Rakefile
require File.expand_path("../config/application", __FILE__)

# Only require this file for gem version < 1.0
# require "appsignal/integrations/rake"

Rails.application.load_tasks
(Für ältere Versionen des AppSignal-Gems, Versionen < 1, müssen Sie die Rake-Integration manuell laden. Sie wird ab Version 1.x automatisch geladen.)

Ruby-Anwendungen

Für reine Ruby-Anwendungen sind einige zusätzliche Schritte erforderlich, um AppSignal zu laden. AppSignal muss eingebunden, konfiguriert und geladen werden. Siehe auch unseren Integrationsleitfaden.
# Rakefile
require "appsignal"

Appsignal.start

task :foo do
  raise "bar"
end

Performance von Rake-Tasks überwachen

Um die Performance von Rake-Tasks und alle Events, die im Task auftreten, zu überwachen, konfigurieren Sie AppSignal mit der Konfigurationsoption enable_rake_performance_instrumentation auf true. Wenn diese Funktion aktiviert ist, werden alle Rake-Tasks instrumentiert und auf Ihren Plan angerechnet.

Stop-Anforderung

Für Rake-Tasks, die auf kurzlebigen Hosts laufen, ist es erforderlich, das AppSignal-Ruby-Gem zu stoppen, bevor der Rake-Prozess beendet wird. Dadurch wird sichergestellt, dass die Daten der Rake-Tasks an AppSignal gemeldet werden, bevor der Host heruntergefahren wird. Dieses Verhalten ist nur in solchen Szenarien erforderlich:
  • Wenn ein geplanter Rake-Task (ein Cron-Job) von einem Hosting-Dienst ausgeführt wird.
  • Wenn ein Rake-Task auf einem Container ausgeführt wird, der startet, um diesen Rake-Task auszuführen, und beim Beenden des Rake-Tasks herunterfährt.
  • Wenn ein Rake-Task auf einem Heroku-Runner oder bei ähnlichen Hosting-Anbietern ausgeführt wird.
Es ist nicht erforderlich, das AppSignal-Ruby-Gem zu stoppen, wenn der Host, auf dem das Skript gestartet wird, nach dem Beenden des Skripts weiterläuft. AppSignal wird automatisch gestoppt, wenn der Rake-Task beendet wird und eine Container- oder Hosting-Umgebung wie Heroku erkannt wird. Dieses Verhalten wird durch die Option enable_at_exit_hook gesteuert. Stellen Sie sicher, dass diese Option für Skripte, die das Stoppen von AppSignal erfordern, auf true gesetzt ist, falls sie nicht automatisch erkannt wird. Möglicherweise muss ein zusätzlicher sleep-Aufruf von einigen Sekunden hinzugefügt werden, um sicherzustellen, dass genügend Zeit zum Senden aller Daten zur Verfügung steht. Verwenden Sie bei Bedarf das at_exit-Beispiel aus dem folgenden Code.
# Short-lived host example task

# This block is called after all tasks are ran
# Ensures the AppSignal agent has enough time to send the data to the AppSignal servers
at_exit { sleep 10 }

task :foo do
  # Your Rake task code
end

Legacy-Stop-Anforderung

Der folgende Abschnitt gilt für Anwendungen, die Ruby Gem 4.5.7 oder älter verwenden. Diese Versionen enthalten nicht die Option enable_at_exit_hook, die dieses Verhalten automatisiert.Für neuere Versionen des Ruby-Gems siehe den Abschnitt Stop-Anforderung.
Wenn ein einzelner Rake-Task auf einem kurzlebigen Host ausgeführt wird (z. B. mit Docker-Containern, Kubernetes oder Heroku-Schedulern), gibt es drei Anforderungen. Dies garantiert, dass die AppSignal-Extension der App Zeit hat, die Daten an den Agent zu übermitteln, und der Agent Zeit hat, die Daten an unsere API zu senden, bevor (der Container) heruntergefahren wird. Die Anforderungen sind:
  • Appsignal.stop muss im Rake-Task aufgerufen werden.
  • running_in_container muss in der Konfiguration auf true gesetzt sein.
    • Für die meisten Container-Typen wird running_in_container automatisch auf true gesetzt, wenn es erkannt wird, für andere ist eine manuelle Konfiguration erforderlich.
  • Ein Sleep von z. B. 10 Sekunden, um dem AppSignal-Agent Zeit zum Senden der Daten zu geben
Ein Beispiel, wie Appsignal.stop im Rakefile aufgerufen wird:
# Short-lived host example task

# This block is called after all tasks are ran
# The argument "rake" is the name of the parent process name which is being
# stopped and logs it as the reason why AppSignal is stopping.
at_exit do
  Appsignal.stop "rake"
  sleep 10 # For short-lived hosts, give the AppSignal agent time to send the data
end

task :foo do
  # Tracking data with AppSignal in your task
  Appsignal.increment_counter "my_custom_counter"
end
Hinweis: Am Ende des Rake-Task-Beispiels wurde im obigen Beispiel ein Sleep von 10 Sekunden hinzugefügt. Dies ist für Tasks erforderlich, die auf kurzlebigen Hosts ausgeführt werden. Wenn der Task abgeschlossen ist, stoppt der Prozess. Der Appsignal.stop-Aufruf übermittelt alle aktuell in der AppSignal-Extension befindlichen Transaktionsdaten an unseren Agent. Anschließend schläft er 10 Sekunden, um dem Agent das Senden der Daten vor dem Herunterfahren zu ermöglichen.