edge
Daugiau informacijos rubyonrails.org: Daugiau apie Ruby on Rails

Aktyvusis palaikymo instrumentavimas

Aktyvusis palaikymas yra pagrindinės „Rails“ dalis, kuri teikia „Ruby“ kalbos plėtinius, įrankius ir kitus dalykus. Vienas iš jų yra instrumentavimo API, kurį galima naudoti programoje, kad būtų galima matuoti tam tikrus veiksmus, vykstančius „Ruby“ kode, pvz., tokius, kurie vyksta „Rails“ programoje ar paties karkaso viduje. Tačiau jis nėra ribotas tik „Rails“. Jei norite, jį galima naudoti nepriklausomai kituose „Ruby“ scenarijuose.

Šiame vadove sužinosite, kaip naudoti „Aktyvaus palaikymo“ instrumentavimo API, kad matuotumėte įvykius „Rails“ ir kitame „Ruby“ kode.

Po šios vadovėlio perskaitymo žinosite:

1 Įvadas į instrumentavimą

Aktyvaus palaikymo teikiamas instrumentavimo API leidžia programuotojams kurti kablys, į kuriuos gali įsikišti kiti programuotojai. „Rails“ karkase yra kelios tokių. Šiuo API programuotojai gali pasirinkti, kada būti informuoti, kai tam tikri įvykiai įvyksta jų programoje ar kitame „Ruby“ kode.

Pavyzdžiui, yra kablys, kuris teikiamas „Active Record“ ir kuris yra iškviestas kiekvieną kartą, kai „Active Record“ naudoja SQL užklausą duomenų bazėje. Šį kablys galima prenumeruoti ir jį galima naudoti, kad būtų stebimas užklausų skaičius tam tikro veiksmo metu. Yra kitas kablys, kuris apima veiksmo valdiklio veiksmo apdorojimą. Jis galėtų būti naudojamas, pavyzdžiui, stebint, kiek laiko užtrunka konkretus veiksmas.

Netgi galite sukurti savo įvykius savo programoje, kuriuos vėliau galite prenumeruoti.

2 Prenumeruoti įvykį

Prenumeruoti įvykį yra lengva. Naudokite ActiveSupport::Notifications.subscribe su bloku, kad klausytumėte bet kokios pranešimo.

Blokas gauna šiuos argumentus:

  • Įvykio pavadinimas
  • Laikas, kada prasidėjo
  • Laikas, kada baigėsi
  • Unikalus instrumento ID, kuris paleido įvykį
  • Įvykio duomenys
ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, started, finished, unique_id, data|
  # jūsų asmeniniai dalykai
  Rails.logger.info "#{name} Gavau! (prasidėjo: #{started}, baigėsi: #{finished})" # process_action.action_controller Gavau (prasidėjo: 2019-05-05 13:43:57 -0800, baigėsi: 2019-05-05 13:43:58 -0800)
end

Jei jums rūpi tikslumas started ir finished skaičiuojant tikslų praėjusį laiką, tada naudokite ActiveSupport::Notifications.monotonic_subscribe. Pateiktas blokas gautų tuos pačius argumentus kaip ir aukščiau, bet started ir finished turės reikšmes su tikslia monotoniška laiku, o ne sienos laiku.

ActiveSupport::Notifications.monotonic_subscribe "process_action.action_controller" do |name, started, finished, unique_id, data|
  # jūsų asmeniniai dalykai
  Rails.logger.info "#{name} Gavau! (prasidėjo: #{started}, baigėsi: #{finished})" # process_action.action_controller Gavau (prasidėjo: 1560978.425334, baigėsi: 1560979.429234)
end

Apibrėžti visus tuos bloko argumentus kiekvieną kartą gali būti nuobodu. Galite lengvai sukurti ActiveSupport::Notifications::Event iš bloko argumentų taip:

ActiveSupport::Notifications.subscribe "process_action.action_controller" do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)

  event.name      # => "process_action.action_controller"
  event.duration  # => 10 (milisekundėmis)
  event.payload   # => {:extra=>informacija}

  Rails.logger.info "#{event} Gavau!"
end

Taip pat galite perduoti bloką, kuris priima tik vieną argumentą, ir jis gaus įvykio objektą:

ActiveSupport::Notifications.subscribe "process_action.action_controller" do |event|
  event.name      # => "process_action.action_controller"
  event.duration  # => 10 (milisekundėmis)
  event.payload   # => {:extra=>informacija}

  Rails.logger.info "#{event} Gavau!"
end

Taip pat galite prenumeruoti įvykius, atitinkančius reguliariąją išraišką. Tai leidžia prenumeruoti kelis įvykius vienu metu. Taip prenumeruoti viską iš ActionController:

ActiveSupport::Notifications.subscribe(/action_controller/) do |*args|
  # tikrinti visus ActionController įvykius
end

3 Peržiūrėkite instrumentavimo laikus naršyklėje

„Rails“ įgyvendina Server Timing standartą, kad laiko informacija būtų prieinama naršyklėje. Norėdami tai įjungti, redaguokite savo aplinkos konfigūraciją (dažniausiai development.rb, nes tai dažniausiai naudojama vystymui), kad būtų įtraukta ši informacija:

  config.server_timing = true

Kai konfigūracija sukonfigūruota (įskaitant serverio paleidimą iš naujo), galite eiti į naršyklės kūrėjo įrankių skydelį, tada pasirinkti Tinklas ir perkrauti savo puslapį. Tada galite pasirinkti bet kurį užklausą į savo „Rails“ serverį ir matysite serverio laiko matavimus laiko matavimo skirtuke. Norėdami pamatyti pavyzdį, kaip tai padaryti, žr. Firefox dokumentaciją.

4 „Rails“ karkaso kablys

„Ruby on Rails“ karkase yra keletas kablys, skirtų įprastiniams įvykiams. Šie įvykiai ir jų duomenys yra išsamiau aprašyti žemiau.

4.1 Veiksmo valdiklis

4.1.1 start_processing.action_controller

Raktas Reikšmė
:controller Valdiklio pavadinimas
:action Veiksmas
:params Užklausos parametrų maišas be jokių filtruotų parametrų
:headers Užklausos antraštės
:format html/js/json/xml ir t.t.
:method HTTP užklausos veiksmažodis
:path Užklausos kelias
{
  controller: "PostsController",
  action: "new",
  params: { "action" => "new", "controller" => "posts" },
  headers: #<ActionDispatch::Http::Headers:0x0055a67a519b88>,
  format: :html,
  method: "GET",
  path: "/posts/new"
}

4.1.2 process_action.action_controller

Raktas Reikšmė
:controller Valdiklio pavadinimas
:action Veiksmas
:params Užklausos parametrų maišas be jokių filtruotų parametrų
:headers Užklausos antraštės
:format html/js/json/xml ir t.t.
:method HTTP užklausos veiksmažodis
:path Užklausos kelias
:request ActionDispatch::Request objektas
:response ActionDispatch::Response objektas
:status HTTP būsenos kodas
:view_runtime Laikas, praleistas peržiūrint vaizdą, milisekundėmis
:db_runtime Laikas, praleistas vykdant duomenų bazės užklausas, milisekundėmis
{
  controller: "PostsController",
  action: "index",
  params: {"action" => "index", "controller" => "posts"},
  headers: #<ActionDispatch::Http::Headers:0x0055a67a519b88>,
  format: :html,
  method: "GET",
  path: "/posts",
  request: #<ActionDispatch::Request:0x00007ff1cb9bd7b8>,
  response: #<ActionDispatch::Response:0x00007f8521841ec8>,
  status: 200,
  view_runtime: 46.848,
  db_runtime: 0.157
}

4.1.3 send_file.action_controller

Raktas Reikšmė
:path Pilnas kelias į failą

Skambinantysis gali pridėti papildomus raktus.

4.1.4 send_data.action_controller

ActionController nepateikia jokios specifinės informacijos apie duomenų siuntimą. Visi parametrai perduodami kaip yra.

4.1.5 redirect_to.action_controller

Raktas Reikšmė
:status HTTP atsakymo kodas
:location Nuoroda, į kurią nukreipiama
:request ActionDispatch::Request objektas
{
  status: 302,
  location: "http://localhost:3000/posts/new",
  request: <ActionDispatch::Request:0x00007ff1cb9bd7b8>
}

4.1.6 halted_callback.action_controller

Raktas Reikšmė
:filter Filtras, kuris sustabdė veiksmą
{
  filter: ":halting_filter"
}

4.1.7 unpermitted_parameters.action_controller

Raktas Reikšmė
:keys Neleistini raktai
:context Maišas su šiais raktas: :controller, :action, :params, :request

4.2 Veiksmo valdiklis — Talpinimas

4.2.1 write_fragment.action_controller

Raktas Reikšmė
:key Pilnas raktas
{
  key: 'posts/1-dashboard-view'
}

4.2.2 read_fragment.action_controller

Raktas Reikšmė
:key Pilnas raktas
{
  key: 'posts/1-dashboard-view'
}

4.2.3 expire_fragment.action_controller

Raktas Reikšmė
:key Pilnas raktas
{
  key: 'posts/1-dashboard-view'
}

4.2.4 exist_fragment?.action_controller

Raktas Reikšmė
:key Pilnas raktas
{
  key: 'posts/1-dashboard-view'
}

4.3 Veiksmo perdavimas

4.3.1 process_middleware.action_dispatch

Raktas Reikšmė
:middleware Tarpininko pavadinimas

4.3.2 redirect.action_dispatch

Raktas Reikšmė
:status HTTP atsakymo kodas
:location Nuoroda, į kurią nukreipiama
:request ActionDispatch::Request objektas

4.3.3 request.action_dispatch

Raktas Reikšmė
:request ActionDispatch::Request objektas

4.4 Veiksmo vaizdas

4.4.1 render_template.action_view

Raktas Reikšmė
:identifier Pilnas kelias į šabloną
:layout Taikomas išdėstymas
:locals Vietiniai kintamieji perduodami šablonui
{
  identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb",
  layout: "layouts/application",
  locals: { foo: "bar" }
}

4.4.2 render_partial.action_view

Raktas Reikšmė
:identifier Pilnas kelias į šabloną
:locals Vietiniai kintamieji perduodami šablonui
{
  identifier: "/Users/adam/projects/notifications/app/views/posts/_form.html.erb",
  locals: { foo: "bar" }
}

4.4.3 render_collection.action_view

Raktas Reikšmė
:identifier Pilnas kelias į šabloną
:count Kolekcijos dydis
:cache_hits Dalinių, gautų iš talpyklos, skaičius

:cache_hits raktas įtraukiamas tik tada, jei kolekcija yra talpinama su cached: true. ruby { identifier: "/Users/adam/projects/notifications/app/views/posts/_post.html.erb", count: 3, cache_hits: 0 }

4.4.4 render_layout.action_view

Raktas Reikšmė
:identifier Pilnas kelias iki šablono
{
  identifier: "/Users/adam/projects/notifications/app/views/layouts/application.html.erb"
}

4.5 Active Record

4.5.1 sql.active_record

Raktas Reikšmė
:sql SQL užklausa
:name Operacijos pavadinimas
:connection Ryšio objektas
:binds Susiejimo parametrai
:type_casted_binds Susiejimo parametrai su konvertuotomis reikšmėmis
:statement_name SQL užklausos pavadinimas
:cached true, jei naudojamos talpyklos užklausos

Adapteriai taip pat gali pridėti savo duomenis.

{
  sql: "SELECT \"posts\".* FROM \"posts\" ",
  name: "Post Load",
  connection: <ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x00007f9f7a838850>,
  binds: [<ActiveModel::Attribute::WithCastValue:0x00007fe19d15dc00>],
  type_casted_binds: [11],
  statement_name: nil
}

4.5.2 strict_loading_violation.active_record

Šis įvykis išskiriamas tik tada, kai config.active_record.action_on_strict_loading_violation yra nustatytas į :log.

Raktas Reikšmė
:owner Modelis su įjungtu strict_loading
:reflection Susiejimo atspindys, kuris bandė įkelti duomenis

4.5.3 instantiation.active_record

Raktas Reikšmė
:record_count Sukurtų įrašų skaičius
:class_name Įrašo klasė
{
  record_count: 1,
  class_name: "User"
}

4.6 Action Mailer

4.6.1 deliver.action_mailer

Raktas Reikšmė
:mailer Pašto siuntimo klasės pavadinimas
:message_id Pranešimo ID, sugeneruotas naudojant Mail gemą
:subject Pranešimo tema
:to Gavėjo adresas (-ai)
:from Siuntėjo adresas
:bcc BCC adresas (-ai)
:cc CC adresas (-ai)
:date Pranešimo data
:mail Pranešimo užkoduota forma
:perform_deliveries Ar vykdomas šio pranešimo siuntimas
{
  mailer: "Notification",
  message_id: "[email protected]",
  subject: "Rails vadovai",
  to: ["[email protected]", "[email protected]"],
  from: ["[email protected]"],
  date: Sat, 10 Mar 2012 14:18:09 +0100,
  mail: "...", # supaprastinimui praleidžiama
  perform_deliveries: true
}

4.6.2 process.action_mailer

Raktas Reikšmė
:mailer Pašto siuntimo klasės pavadinimas
:action Veiksmas
:args Argumentai
{
  mailer: "Notification",
  action: "welcome_email",
  args: []
}

4.7 Active Support — Talpinimas

4.7.1 cache_read.active_support

Raktas Reikšmė
:key Raktas naudojamas talpykloje
:store Talpyklos klasės pavadinimas
:hit Ar šis skaitymas yra atitikimas
:super_operation :fetch, jei skaitymas atliekamas su fetch

4.7.2 cache_read_multi.active_support

Raktas Reikšmė
:key Raktai naudojami talpykloje
:store Talpyklos klasės pavadinimas
:hits Atitikimų raktai talpykloje
:super_operation :fetch_multi, jei skaitymas atliekamas su fetch_multi

4.7.3 cache_generate.active_support

Šis įvykis išskiriamas tik tada, kai fetch yra iškviestas su bloku.

Raktas Reikšmė
:key Raktas naudojamas talpykloje
:store Talpyklos klasės pavadinimas

Pasirinktys, perduotos fetch metodui, bus sujungtos su duomenimis rašant į talpyklą.

{
  key: "name-of-complicated-computation",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.7.4 cache_fetch_hit.active_support

Šis įvykis išskiriamas tik tada, kai fetch yra iškviestas su bloku.

Raktas Reikšmė
:key Raktas naudojamas talpykloje
:store Talpyklos klasės pavadinimas

Pasirinktys, perduotos fetch metodui, bus sujungtos su duomenimis.

{
  key: "name-of-complicated-computation",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.7.5 cache_write.active_support

Raktas Reikšmė
:key Raktas naudojamas talpykloje
:store Talpyklos klasės pavadinimas

Talpyklos gali pridėti savo duomenis taip pat.

{
  key: "name-of-complicated-computation",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.7.6 cache_write_multi.active_support

Raktas Reikšmė
:key Raktai ir reikšmės įrašytos į talpyklą
:store Talpyklos klasės pavadinimas

4.7.7 cache_increment.active_support

Šis įvykis yra iššaukiamas tik naudojant MemCacheStore arba RedisCacheStore.

Raktas Reikšmė
:key Raktas naudojamas saugykloje
:store Saugyklos klasės pavadinimas
:amount Padidinimo suma
{
  key: "alus-buteliuose",
  store: "ActiveSupport::Cache::RedisCacheStore",
  amount: 99
}

4.7.8 cache_decrement.active_support

Šis įvykis yra iššaukiamas tik naudojant Memcached arba Redis saugyklas.

Raktas Reikšmė
:key Raktas naudojamas saugykloje
:store Saugyklos klasės pavadinimas
:amount Suma, kurią reikia sumažinti
{
  key: "alus-buteliuose",
  store: "ActiveSupport::Cache::RedisCacheStore",
  amount: 1
}

4.7.9 cache_delete.active_support

Raktas Reikšmė
:key Raktas naudojamas saugykloje
:store Saugyklos klasės pavadinimas
{
  key: "sudėtingo-skaiciavimo-pavadinimas",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.7.10 cache_delete_multi.active_support

Raktas Reikšmė
:key Raktai naudojami saugykloje
:store Saugyklos klasės pavadinimas

4.7.11 cache_delete_matched.active_support

Šis įvykis yra iššaukiamas tik naudojant RedisCacheStore, FileStore arba MemoryStore.

Raktas Reikšmė
:key Raktų šablonas
:store Saugyklos klasės pavadinimas
{
  key: "įrašai/*",
  store: "ActiveSupport::Cache::RedisCacheStore"
}

4.7.12 cache_cleanup.active_support

Šis įvykis yra iššaukiamas tik naudojant MemoryStore.

Raktas Reikšmė
:store Saugyklos klasės pavadinimas
:size Įrašų skaičius saugykloje prieš valymą
{
  store: "ActiveSupport::Cache::MemoryStore",
  size: 9001
}

4.7.13 cache_prune.active_support

Šis įvykis yra iššaukiamas tik naudojant MemoryStore.

Raktas Reikšmė
:store Saugyklos klasės pavadinimas
:key Tikslinis saugyklos dydis baitais
:from Saugyklos dydis prieš valymą baitais
{
  store: "ActiveSupport::Cache::MemoryStore",
  key: 5000,
  from: 9001
}

4.7.14 cache_exist?.active_support

Raktas Reikšmė
:key Raktas naudojamas saugykloje
:store Saugyklos klasės pavadinimas
{
  key: "sudėtingo-skaiciavimo-pavadinimas",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.8 Active Support — Pranešimai

4.8.1 message_serializer_fallback.active_support

Raktas Reikšmė
:serializer Pagrindinis (numatytasis) serializatorius
:fallback Atsarginis (faktinis) serializatorius
:serialized Serializuotas eilutė
:deserialized Deserializuota reikšmė
{
  serializer: :json_allow_marshal,
  fallback: :marshal,
  serialized: "\x04\b{\x06I\"\nHello\x06:\x06ETI\"\nWorld\x06;\x00T",
  deserialized: { "Hello" => "World" },
}

4.9 Active Job

4.9.1 enqueue_at.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas

4.9.2 enqueue.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas

4.9.3 enqueue_retry.active_job

Raktas Reikšmė
:job Darbo objektas
:adapter Eilės adapterio objektas, apdorojantis darbą
:error Klaida, dėl kurios buvo bandyta darbą pakartoti
:wait Laiko tarpas tarp pakartojimo

4.9.4 enqueue_all.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:jobs Darbų objektų masyvas

4.9.5 perform_start.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas

4.9.6 perform.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas
:db_runtime Laikas, praleistas vykdant duomenų bazės užklausas ms

4.9.7 retry_stopped.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas
:error Klaida, dėl kurios buvo bandyta darbą pakartoti

4.9.8 discard.active_job

Raktas Reikšmė
:adapter Eilės adapterio objektas, apdorojantis darbą
:job Darbo objektas
:error Klaida, dėl kurios darbas buvo atmestas

4.10 Veiksmo kabelis

4.10.1 perform_action.action_cable

Raktas Reikšmė
:channel_class Kanalo klasės pavadinimas
:action Veiksmas
:data Duomenų maišos reikšmė

4.10.2 transmit.action_cable

Raktas Reikšmė
:channel_class Kanalo klasės pavadinimas
:data Duomenų maišos reikšmė
:via Per

4.10.3 transmit_subscription_confirmation.action_cable

Raktas Reikšmė
:channel_class Kanalo klasės pavadinimas

4.10.4 transmit_subscription_rejection.action_cable

Raktas Reikšmė
:channel_class Kanalo klasės pavadinimas

4.10.5 broadcast.action_cable

Raktas Reikšmė
:broadcasting Vardintas transliavimas
:message Pranešimo maišos reikšmė
:coder Koduotojas

4.11 Aktyvus saugojimas

4.11.1 preview.active_storage

Raktas Reikšmė
:key Saugus ženklas

4.11.2 transform.active_storage

4.11.3 analyze.active_storage

Raktas Reikšmė
:analyzer Analizatoriaus pavadinimas, pvz., ffprobe

4.12 Aktyvus saugojimas - Saugojimo paslauga

4.12.1 service_upload.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas
:checksum Patikrinti vientisumą

4.12.2 service_streaming_download.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas

4.12.3 service_download_chunk.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas
:range Bandytas skaityti baitų intervalas

4.12.4 service_download.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas

4.12.5 service_delete.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas

4.12.6 service_delete_prefixed.active_storage

Raktas Reikšmė
:prefix Raktų priešdėlis
:service Paslaugos pavadinimas

4.12.7 service_exist.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas
:exist Failas arba maiša egzistuoja arba ne

4.12.8 service_url.active_storage

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas
:url Sugeneruotas URL

4.12.9 service_update_metadata.active_storage

Šis įvykis išskiriamas tik naudojant Google Cloud Storage paslaugą.

Raktas Reikšmė
:key Saugus ženklas
:service Paslaugos pavadinimas
:content_type HTTP Content-Type laukas
:disposition HTTP Content-Disposition laukas

4.13 Veiksmo pašto dėžutė

4.13.1 process.action_mailbox

Raktas Reikšmė
:mailbox Pašto dėžutės klasės pavyzdys, paveldintis iš ActionMailbox::Base
:inbound_email Maišos su duomenimis apie apdorojamą gautą el. laišką
{
  mailbox: #<RepliesMailbox:0x00007f9f7a8388>,
  inbound_email: {
    id: 1,
    message_id: "[email protected]",
    status: "processing"
  }
}

4.14 Railties

4.14.1 load_config_initializer.railties

Raktas Reikšmė
:initializer Įkelto inicializatoriaus kelias config/initializers

4.15 Rails

4.15.1 deprecation.rails

Raktas Reikšmė
:message Nebenaudojimo įspėjimas
:callstack Iš kur kilo nebenaudojimas
:gem_name Gem pavadinimas, pranešantis apie nebenaudojimą
:deprecation_horizon Versija, kurioje nebenaudojama elgsena bus pašalinta

5 Išimtys

Jei bet kurioje instrumentacijoje įvyksta išimtis, įvykio duomenyse bus įtraukta informacija apie tai.

Raktas Reikšmė
:exception Masyvas, turintis du elementus. Išimties klasės pavadinimas ir pranešimas
:exception_object Išimties objektas

6 Sukurti pasirinktinus įvykius

Pridėti savo įvykius taip pat yra lengva. Aktyvusis palaikymas atliks visą sunkų darbą už jus. Tiesiog iškvieskite ActiveSupport::Notifications.instrument su name, payload ir bloku. Pranešimas bus išsiųstas po to, kai blokas grąžins rezultatą. Aktyvusis palaikymas sugeneruos pradžios ir pabaigos laikus, ir pridės instrumentuotojo unikalų ID. Visi į instrument išsiųsti duomenys bus pateks į pranešimo duomenis. Štai pavyzdys:

ActiveSupport::Notifications.instrument "my.custom.event", this: :data do
  # čia atlikite savo individualius veiksmus
end

Dabar galite klausytis šio įvykio naudodami:

ActiveSupport::Notifications.subscribe "my.custom.event" do |name, started, finished, unique_id, data|
  puts data.inspect # {:this=>:data}
end

Taip pat galite iškviesti instrument be bloko. Tai leidžia jums pasinaudoti instrumentavimo infrastruktūra kitais pranešimų naudojimo būdais.

ActiveSupport::Notifications.instrument "my.custom.event", this: :data

ActiveSupport::Notifications.subscribe "my.custom.event" do |name, started, finished, unique_id, data|
  puts data.inspect # {:this=>:data}
end

Kurdami savo įvykius, turėtumėte laikytis "Rails" konvencijų. Formatas yra: įvykis.biblioteka. Jei jūsų programa siunčia "Tweet'us", turėtumėte sukurti įvykį pavadinimu tweet.twitter.

Atsiliepimai

Jūs esate skatinami padėti pagerinti šio vadovo kokybę.

Prašome prisidėti, jei pastebite rašybos klaidų ar faktinių klaidų. Norėdami pradėti, galite perskaityti mūsų dokumentacijos prisidėjimo skyrių.

Taip pat gali būti nepilnos informacijos arba informacijos, kuri nėra atnaujinta. Prašome pridėti bet kokią trūkstamą dokumentaciją pagrindiniam. Patikrinkite Edge vadovus pirmiausia, ar problemas jau išspręsta arba ne pagrindinėje šakoje. Patikrinkite Ruby on Rails vadovų gaires dėl stiliaus ir konvencijų.

Jei dėl kokios nors priežasties pastebite kažką, ką reikia ištaisyti, bet negalite patys tai pataisyti, prašome pranešti apie problemą.

Ir galiausiai, bet ne mažiau svarbu, bet koks diskusijos dėl Ruby on Rails dokumentacijos yra labai laukiamos oficialiame Ruby on Rails forume.