Naar hoofdinhoud gaan
Elke exceptie die in een Rake-taak wordt geregistreerd, wordt naar AppSignal verzonden en geregistreerd onder de “Background”-namespace. Houd er rekening mee dat we alleen excepties in Rake-taken bijhouden. Er is geen prestatie-monitoring voor Rake-taken. (Om handmatig prestatie-monitoring te integreren in geselecteerde Rake-taken, zie onze integratiehandleiding en handleiding voor aangepaste instrumentatie.) Afhankelijk van welke versie van de AppSignal-gem u gebruikt en in welke context zijn enkele handmatige stappen vereist.

Integraties

Rails-applicaties

Voor Rails-applicaties zorgt u ervoor dat u afhankelijk bent van de :environment-taak. Dit laadt de Rails-applicatie in het geheugen en start AppSignal als onderdeel van de applicatie.
# lib/tasks/my_task.rb
task :my_task => :environment do
  # do stuff
end

Rakefile

Het Rakefile van uw Rails-applicatie zou er ongeveer uit moeten zien als het onderstaande voorbeeld. Dit zou al het geval moeten zijn, u hoeft het niet te wijzigen.
# 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
(Voor oudere versies van de AppSignal-gem, versies < 1, moet u de Rake-integratie handmatig requiren. Deze wordt automatisch geladen voor versie 1.x en hoger.)

Ruby-applicaties

Voor pure Ruby-applicaties zijn er enkele extra stappen nodig om AppSignal te laden. AppSignal moet worden gerequired, geconfigureerd en geladen. Zie ook onze integratiehandleiding.
# Rakefile
require "appsignal"

Appsignal.start

task :foo do
  raise "bar"
end

Prestaties van Rake-taken monitoren

Om de prestaties van Rake-taken en alle events die in de taak plaatsvinden te monitoren, configureert u AppSignal met de configuratieoptie enable_rake_performance_instrumentation ingesteld op true. Met deze functie ingeschakeld worden alle Rake-taken geïnstrumenteerd en meegeteld voor uw abonnement.

Stop-vereiste

Voor Rake-taken die op kortlevende hosts draaien, is het vereist om de AppSignal Ruby-gem te stoppen voordat het Rake-proces wordt afgesloten. Dit zorgt ervoor dat de gegevens van de Rake-taken aan AppSignal worden gerapporteerd voordat de host wordt afgesloten. Dit gedrag is alleen nodig in dergelijke scenario’s zoals:
  • Wanneer een geplande Rake-taak (een cron job) wordt uitgevoerd door een hostingservice.
  • Wanneer een Rake-taak wordt uitgevoerd op een container die start om deze Rake-taak uit te voeren en wordt afgesloten wanneer de Rake-taak eindigt.
  • Wanneer een Rake-taak wordt uitgevoerd op een Heroku-runner of vergelijkbare hostingproviders.
Het is niet nodig om de AppSignal Ruby-gem te stoppen als de host waarop het script wordt gestart, blijft draaien nadat het script is afgesloten. AppSignal wordt automatisch gestopt wanneer de Rake-taak wordt afgesloten en een container of hosting-omgeving zoals Heroku wordt gedetecteerd. Dit gedrag wordt beheerd door de optie enable_at_exit_hook. Zorg ervoor dat deze optie op true staat voor scripts waarvoor AppSignal moet worden gestopt, als dit niet automatisch wordt gedetecteerd. Het kan nodig zijn om een extra sleep-aanroep van een paar seconden toe te voegen om ervoor te zorgen dat er voldoende tijd is om alle gegevens te verzenden. Gebruik indien nodig het at_exit-gebruiksvoorbeeld uit de onderstaande 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

Stop-vereiste legacy

De onderstaande sectie is voor applicaties die Ruby-gem 4.5.7 en lager gebruiken. Deze versies bevatten niet de optie enable_at_exit_hook die dit gedrag automatiseert.Voor nieuwere versies van de Ruby-gem, zie de sectie stop-vereiste.
Bij het uitvoeren van een enkele Rake-taak op een kortlevende host (bijv. met Docker-containers, Kubernetes of Heroku-schedulers) zijn er drie vereisten. Dit garandeert dat de AppSignal-extensie van de app tijd heeft om de gegevens naar de agent door te spoelen en dat de agent tijd heeft om de gegevens naar onze API te verzenden voordat (de container) wordt afgesloten. De vereisten zijn:
  • Appsignal.stop moet worden aangeroepen in de Rake-taak.
  • running_in_container moet op true worden ingesteld in de configuratie.
    • Voor de meeste containertypes wordt running_in_container automatisch op true ingesteld wanneer gedetecteerd, voor andere is handmatige configuratie vereist.
  • Een sleep van bijv. 10 seconden om de AppSignal-agent tijd te geven om de gegevens te verzenden
Een voorbeeld van hoe Appsignal.stop in de Rakefile wordt aangeroepen:
# 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
Let op: In het bovenstaande voorbeeld is een sleep van 10 seconden toegevoegd aan het einde van het Rake-taakvoorbeeld. Dit is vereist voor taken die op kortlevende hosts worden uitgevoerd. Wanneer de taak voltooid is, stopt het proces. De aanroep van Appsignal.stop spoelt alle transactiegegevens die zich momenteel in de AppSignal-extensie bevinden door naar onze agent. Vervolgens slaapt het 10 seconden om de agent in staat te stellen de gegevens te verzenden voordat het wordt afgesloten.