edge
เพิ่มเติมที่ rubyonrails.org: เพิ่มเติมเกี่ยวกับ Ruby on Rails

Active Support Instrumentation

Active Support เป็นส่วนหนึ่งของ Rails ที่ให้การขยายภาษา Ruby, โปรแกรมเสริม และสิ่งอื่น ๆ ให้บริการ ส่วนหนึ่งที่มีอยู่ใน Active Support คือ API สำหรับการตรวจสอบที่สามารถใช้ภายในแอปพลิเคชันเพื่อวัดการกระทำบางอย่างที่เกิดขึ้นภายในรหัส Ruby เช่นในแอปพลิเคชัน Rails หรือเฟรมเวิร์กเอง แต่ไม่จำกัดเฉพาะ Rails เท่านั้น สามารถใช้งานแยกต่างหากในสคริปต์ Ruby อื่น ๆ ได้ตามต้องการ

ในคู่มือนี้คุณจะเรียนรู้วิธีใช้ Active Support's instrumentation API เพื่อวัดเหตุการณ์ภายใน Rails และรหัส Ruby อื่น ๆ

หลังจากอ่านคู่มือนี้คุณจะรู้:

1 แนะนำการใช้งาน Instrumentation

API สำหรับ instrumentation ที่ Active Support ให้เป็นการให้นักพัฒนาสามารถให้ตัวเก้าอี้ที่นักพัฒนาคนอื่นสามารถเชื่อมต่อได้ มี หลายอย่าง ในเฟรมเวิร์ก Rails ด้วย ด้วย API นี้นักพัฒนาสามารถเลือกที่จะได้รับการแจ้งเตือนเมื่อเหตุการณ์บางอย่างเกิดขึ้นภายในแอปพลิเคชันของพวกเขาหรือรหัส Ruby อื่น ๆ

ตัวอย่างเช่น มี ตัวเก้าอี้ ที่ให้ใน Active Record ที่เรียกใช้ทุกครั้งที่ Active Record ใช้คำสั่ง SQL ในฐานข้อมูล ตัวเก้าอี้นี้สามารถ สมัครใช้ และใช้เพื่อติดตามจำนวนคำสั่งที่ใช้ในการกระทำบางอย่างได้ เช่น มี ตัวเก้าอี้อื่น รอบการประมวลผลของการกระทำของคอนโทรลเลอร์ สามารถใช้เพื่อติดตามเวลาที่การกระทำเฉพาะนั้นใช้เวลานานเท่าไหร่

คุณยังสามารถ สร้างเหตุการณ์ที่กำหนดเอง ภายในแอปพลิเคชันของคุณซึ่งคุณสามารถสมัครใช้งานได้ในภายหลัง

2 การสมัครใช้งานกับเหตุการณ์

การสมัครใช้งานกับเหตุการณ์เป็นเรื่องง่าย ใช้ ActiveSupport::Notifications.subscribe พร้อมกับบล็อกเพื่อฟังการแจ้งเตือนใด ๆ

บล็อกจะได้รับอาร์กิวเมนต์ต่อไปนี้:

  • ชื่อเหตุการณ์
  • เวลาที่เริ่มต้น
  • เวลาที่สิ้นสุด
  • รหัสประจำตัวที่ไม่ซ้ำกันสำหรับตัวเครื่องมือที่เปิดเหตุการณ์
  • ข้อมูลสำหรับเหตุการณ์
ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, started, finished, unique_id, data|
  # สิ่งที่คุณกำหนดเอง
  Rails.logger.info "#{name} Received! (started: #{started}, finished: #{finished})" # process_action.action_controller Received (started: 2019-05-05 13:43:57 -0800, finished: 2019-05-05 13:43:58 -0800)
end

หากคุณกังวลเกี่ยวกับความแม่นยำของ started และ finished เพื่อคำนวณเวลาที่ใช้ได้อย่างแม่นยำ ให้ใช้ ActiveSupport::Notifications.monotonic_subscribe บล็อกที่กำหนดจะได้รับอาร์กิวเมนต์เดียวกันกับข้างต้น แต่ started และ finished จะมีค่าที่แม่นยำเป็นเวลาโมโนโทนิกแทนเวลานาฬิกาตามผนวก

ActiveSupport::Notifications.monotonic_subscribe "process_action.action_controller" do |name, started, finished, unique_id, data|
  # สิ่งที่คุณกำหนดเอง
  Rails.logger.info "#{name} Received! (started: #{started}, finished: #{finished})" # process_action.action_controller Received (started: 1560978.425334, finished: 1560979.429234)
end

การกำหนดอาร์กิวเมนต์บล็อกเหล่านั้นทุกครั้งอาจเป็นเรื่องน่าเบื่อ คุณสามารถสร้าง ActiveSupport::Notifications::Event จากอาร์กิวเมนต์บล็อกได้อย่างง่ายดายเช่นนี้:

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

  event.name      # => "process_action.action_controller"
  event.duration  # => 10 (ในหน่วยมิลลิวินาที)
  event.payload   # => {:extra=>information}

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

คุณยังสามารถส่งบล็อกที่ยอมรับอาร์กิวเมนต์เพียงอย่างเดียวและจะได้รับออบเจกต์เหตุการณ์:

ActiveSupport::Notifications.subscribe "process_action.action_controller" do |event|
  event.name      # => "process_action.action_controller"
  event.duration  # => 10 (ในหน่วยมิลลิวินาที)
  event.payload   # => {:extra=>information}

  Rails.logger.info "#{event} ได้รับแล้ว!"
end

คุณยังสามารถสมัครสมาชิกกับเหตุการณ์ที่ตรงกันกับ regular expression นี้ได้ เพื่อให้คุณสามารถสมัครสมาชิกกับเหตุการณ์หลายอย่างในครั้งเดียว นี่คือวิธีการสมัครสมาชิกกับทุกอย่างจาก ActionController:

ActiveSupport::Notifications.subscribe(/action_controller/) do |*args|
  # ตรวจสอบเหตุการณ์ ActionController ทั้งหมด
end

3 ดูเวลาการทำงานจากการใช้เครื่องมือในเบราว์เซอร์ของคุณ

Rails นำเสนอมาตรฐาน Server Timing เพื่อทำให้ข้อมูลเวลาทำงานสามารถใช้ได้ในเบราว์เซอร์เว็บ ในการเปิดใช้งาน คุณสามารถแก้ไขการกำหนดค่าสภาพแวดล้อม (โดยปกติคือ development.rb เนื่องจากมักจะใช้ในการพัฒนามากที่สุด) เพื่อรวมการกำหนดค่าต่อไปนี้:

  config.server_timing = true

เมื่อกำหนดค่าแล้ว (รวมถึงการรีสตาร์ทเซิร์ฟเวอร์ของคุณ) คุณสามารถไปที่แถบ Developer Tools ของเบราว์เซอร์ของคุณ จากนั้นเลือกเครือข่ายและโหลดหน้าของคุณอีกครั้ง คุณจะสามารถเลือกคำขอใดคำขอหนึ่งไปยังเซิร์ฟเวอร์ Rails ของคุณและจะเห็นเวลาการทำงานของเซิร์ฟเวอร์ในแท็บเวลา สำหรับตัวอย่างการทำเช่นนี้ ดูเอกสาร Firefox ได้

4 Hooks ของ Rails Framework

ภายในเฟรมเวิร์ก Ruby on Rails มีการให้ hooks หลายอย่างสำหรับเหตุการณ์ที่พบบ่อย เหตุการณ์เหล่านี้และข้อมูลเพิ่มเติมสามารถดูได้ด้านล่าง

4.1 Action Controller

4.1.1 start_processing.action_controller

คีย์ ค่า
:controller ชื่อคอนโทรลเลอร์
:action แอ็กชัน
:params แฮชของพารามิเตอร์ของคำขอโดยไม่มีพารามิเตอร์ที่ถูกกรอง
:headers ส่วนหัวของคำขอ
:format html/js/json/xml เป็นต้น
:method คำขอ HTTP
:path เส้นทางของคำขอ
{
  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

คีย์ ค่า
:controller ชื่อคอนโทรลเลอร์
:action แอ็กชัน
:params แฮชของพารามิเตอร์ของคำขอโดยไม่มีพารามิเตอร์ที่ถูกกรอง
:headers ส่วนหัวของคำขอ
:format html/js/json/xml เป็นต้น
:method คำขอ HTTP
:path เส้นทางของคำขอ
:request ออบเจกต์ ActionDispatch::Request
:response ออบเจกต์ ActionDispatch::Response
:status รหัสสถานะ HTTP
:view_runtime เวลาที่ใช้ในการแสดงผลในหน่วยมิลลิวินาที
:db_runtime เวลาที่ใช้ในการดำเนินการคิวรีฐานข้อมูลในหน่วยมิลลิวินาที
{
  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

คีย์ ค่า
:path เส้นทางสมบูรณ์ไปยังไฟล์

คีย์เพิ่มเติมอาจถูกเพิ่มโดยผู้เรียกใช้งาน

4.1.4 send_data.action_controller

ActionController ไม่เพิ่มข้อมูลเฉพาะใดๆเข้าไปใน payload ทั้งหมด ตัวเลือกทั้งหมดจะถูกส่งผ่านไปยัง payload

4.1.5 redirect_to.action_controller

คีย์ ค่า
:status รหัสการตอบสนอง HTTP
:location URL ที่จะเปลี่ยนเส้นทางไปยัง
:request ออบเจกต์ ActionDispatch::Request
{
  status: 302,
  location: "http://localhost:3000/posts/new",
  request: <ActionDispatch::Request:0x00007ff1cb9bd7b8>
}

4.1.6 halted_callback.action_controller

คีย์ ค่า
:filter ตัวกรองที่หยุดการทำงาน
{
  filter: ":halting_filter"
}

4.1.7 unpermitted_parameters.action_controller

คีย์ ค่า
:keys คีย์ที่ไม่ได้รับอนุญาต
:context แฮชที่มีคีย์ต่อไปนี้: :controller, :action, :params, :request

4.2 Action Controller — Caching

4.2.1 write_fragment.action_controller

คีย์ ค่า
:key คีย์ทั้งหมด
{
  key: 'posts/1-dashboard-view'
}

4.2.2 read_fragment.action_controller

คีย์ ค่า
:key คีย์ทั้งหมด
{
  key: 'posts/1-dashboard-view'
}

4.2.3 expire_fragment.action_controller

คีย์ ค่า
:key คีย์ทั้งหมด
{
  key: 'posts/1-dashboard-view'
}

4.2.4 exist_fragment?.action_controller

คีย์ ค่า
:key คีย์ทั้งหมด
{
  key: 'posts/1-dashboard-view'
}

4.3 Action Dispatch

4.3.1 process_middleware.action_dispatch

คีย์ ค่า
:middleware ชื่อของ middleware

4.3.2 redirect.action_dispatch

คีย์ ค่า
:status รหัสการตอบสนอง HTTP
:location URL ที่จะเปลี่ยนเส้นทางไปยัง
:request อ็อบเจกต์ ActionDispatch::Request

4.3.3 request.action_dispatch

คีย์ ค่า
:request อ็อบเจกต์ ActionDispatch::Request

4.4 Action View

4.4.1 render_template.action_view

คีย์ ค่า
:identifier เส้นทางเต็มไปยังเทมเพลต
:layout เลเอาท์ที่ใช้ได้
:locals ตัวแปรท้องถิ่นที่ส่งไปยังเทมเพลต
{
  identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb",
  layout: "layouts/application",
  locals: { foo: "bar" }
}

4.4.2 render_partial.action_view

คีย์ ค่า
:identifier เส้นทางเต็มไปยังเทมเพลต
:locals ตัวแปรท้องถิ่นที่ส่งไปยังเทมเพลต
{
  identifier: "/Users/adam/projects/notifications/app/views/posts/_form.html.erb",
  locals: { foo: "bar" }
}

4.4.3 render_collection.action_view

คีย์ ค่า
:identifier เส้นทางเต็มไปยังเทมเพลต
:count ขนาดของคอลเลกชัน
:cache_hits จำนวนพาร์ทเชียลที่เรียกจากแคช

คีย์ :cache_hits เพิ่มเข้ามาเมื่อคอลเลกชันถูกแสดงผลด้วย cached: true เท่านั้น.

{
  identifier: "/Users/adam/projects/notifications/app/views/posts/_post.html.erb",
  count: 3,
  cache_hits: 0
}

4.4.4 render_layout.action_view

คีย์ ค่า
:identifier เส้นทางเต็มไปยังเทมเพลต
{
  identifier: "/Users/adam/projects/notifications/app/views/layouts/application.html.erb"
}

4.5 Active Record

4.5.1 sql.active_record

คีย์ ค่า
:sql คำสั่ง SQL
:name ชื่อของการดำเนินการ
:connection อ็อบเจกต์การเชื่อมต่อ
:binds พารามิเตอร์ที่ผูก
:type_casted_binds พารามิเตอร์ที่ผูกแปลงชนิด
:statement_name ชื่อคำสั่ง SQL
:cached true เพิ่มเข้ามาเมื่อใช้คิวรีแคช

แอดาปเตอร์อาจเพิ่มข้อมูลของตนเองเข้าไปด้วย ruby { 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

เหตุการณ์นี้เกิดขึ้นเมื่อ config.active_record.action_on_strict_loading_violation ถูกตั้งค่าเป็น :log เท่านั้น

คีย์ ค่า
:owner โมเดลที่เปิดใช้งาน strict_loading
:reflection Reflection ของความสัมพันธ์ที่พยายามโหลดข้อมูล

4.5.3 instantiation.active_record

คีย์ ค่า
:record_count จำนวนเรคคอร์ดที่ถูกสร้างขึ้น
:class_name ชื่อคลาสของเรคคอร์ด
{
  record_count: 1,
  class_name: "User"
}

4.6 Action Mailer

4.6.1 deliver.action_mailer

คีย์ ค่า
:mailer ชื่อคลาสเมลเลอร์
:message_id ID ของข้อความที่สร้างขึ้นโดย Mail gem
:subject หัวข้อของอีเมล
:to ที่อยู่ผู้รับอีเมล
:from ที่อยู่ผู้ส่งอีเมล
:bcc ที่อยู่ผู้รับแบบลับ
:cc ที่อยู่ผู้รับแบบสำเนา
:date วันที่ของอีเมล
:mail รูปแบบของอีเมลที่ถูกเข้ารหัส
:perform_deliveries บอกว่าการส่งข้อความนี้ถูกดำเนินการหรือไม่
{
  mailer: "Notification",
  message_id: "[email protected]",
  subject: "Rails Guides",
  to: ["[email protected]", "[email protected]"],
  from: ["[email protected]"],
  date: Sat, 10 Mar 2012 14:18:09 +0100,
  mail: "...", # ถูกละเลยเพื่อความกระชับ
  perform_deliveries: true
}

4.6.2 process.action_mailer

คีย์ ค่า
:mailer ชื่อคลาสเมลเลอร์
:action แอ็กชัน
:args อาร์กิวเมนต์
{
  mailer: "Notification",
  action: "welcome_email",
  args: []
}

4.7 Active Support — Caching

4.7.1 cache_read.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
:hit ถ้าการอ่านนี้เป็นการตอบรับ
:super_operation :fetch ถ้าการอ่านทำกับ fetch

4.7.2 cache_read_multi.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
:hits คีย์ของการอ่านที่ตอบรับ
:super_operation :fetch_multi ถ้าการอ่านทำกับ fetch_multi

4.7.3 cache_generate.active_support

เหตุการณ์นี้เกิดขึ้นเมื่อ fetch ถูกเรียกใช้งานพร้อมกับบล็อก

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์

ตัวเลือกที่ถูกส่งผ่านไปยัง fetch จะถูกผสมกับข้อมูลเมื่อเขียนลงในสโตร์

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

4.7.4 cache_fetch_hit.active_support

เหตุการณ์นี้เกิดขึ้นเมื่อ fetch ถูกเรียกใช้งานพร้อมกับบล็อก

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์

ตัวเลือกที่ถูกส่งผ่านไปยัง fetch จะถูกผสมกับข้อมูล ruby { key: "name-of-complicated-computation", store: "ActiveSupport::Cache::MemCacheStore" }

4.7.5 cache_write.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์

สโตร์แคชอาจเพิ่มข้อมูลของตัวเองเข้าไปด้วย

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

4.7.6 cache_write_multi.active_support

คีย์ ค่า
:key คีย์และค่าที่เขียนลงในสโตร์
:store ชื่อคลาสสโตร์

4.7.7 cache_increment.active_support

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemCacheStore หรือ RedisCacheStore.

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
:amount จำนวนการเพิ่มขึ้น
{
  key: "bottles-of-beer",
  store: "ActiveSupport::Cache::RedisCacheStore",
  amount: 99
}

4.7.8 cache_decrement.active_support

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ Memcached หรือ Redis cache stores.

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
:amount จำนวนการลดลง
{
  key: "bottles-of-beer",
  store: "ActiveSupport::Cache::RedisCacheStore",
  amount: 1
}

4.7.9 cache_delete.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
{
  key: "name-of-complicated-computation",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.7.10 cache_delete_multi.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์

4.7.11 cache_delete_matched.active_support

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ RedisCacheStore, FileStore, หรือ MemoryStore.

คีย์ ค่า
:key รูปแบบคีย์ที่ใช้
:store ชื่อคลาสสโตร์
{
  key: "posts/*",
  store: "ActiveSupport::Cache::RedisCacheStore"
}

4.7.12 cache_cleanup.active_support

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemoryStore.

คีย์ ค่า
:store ชื่อคลาสสโตร์
:size จำนวนรายการในแคชก่อนทำความสะอาด
{
  store: "ActiveSupport::Cache::MemoryStore",
  size: 9001
}

4.7.13 cache_prune.active_support

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemoryStore.

คีย์ ค่า
:store ชื่อคลาสสโตร์
:key ขนาดเป้าหมาย (ในไบต์) สำหรับแคช
:from ขนาด (ในไบต์) ของแคชก่อนการตัดทอน
{
  store: "ActiveSupport::Cache::MemoryStore",
  key: 5000,
  from: 9001
}

4.7.14 cache_exist?.active_support

คีย์ ค่า
:key คีย์ที่ใช้ในสโตร์
:store ชื่อคลาสสโตร์
{
  key: "name-of-complicated-computation",
  store: "ActiveSupport::Cache::MemCacheStore"
}

4.8 Active Support — Messages

4.8.1 message_serializer_fallback.active_support

คีย์ ค่า
:serializer ซีเรียลไรเซอร์หลัก (ที่ตั้งใจ)
:fallback ซีเรียลไรเซอร์สำรอง (จริง)
:serialized สตริงที่ถูกซีเรียลไรซ์
:deserialized ค่าที่ถูกแปลงกลับให้กลับมา
{
  serializer: :json_allow_marshal,
  fallback: :marshal,
  serialized: "\x04\b{\x06I\"\nสวัสดี\x06:\x06ETI\"\nโลก\x06;\x00T",
  deserialized: { "สวัสดี" => "โลก" },
}

4.9 Active Job

4.9.1 enqueue_at.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน

4.9.2 enqueue.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน

4.9.3 enqueue_retry.active_job

คีย์ ค่า
:job ออบเจ็กต์งาน
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:error ข้อผิดพลาดที่ทำให้ต้องลองใหม่
:wait ค่าความล่าช้าของการลองใหม่

4.9.4 enqueue_all.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:jobs อาร์เรย์ของออบเจ็กต์งาน

4.9.5 perform_start.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน

4.9.6 perform.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน
:db_runtime จำนวนเวลาที่ใช้ในการดำเนินการคิวรีฐานข้อมูลในหน่วยเวลา (มิลลิวินาที)

4.9.7 retry_stopped.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน
:error ข้อผิดพลาดที่ทำให้ต้องลองใหม่

4.9.8 discard.active_job

คีย์ ค่า
:adapter ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job ออบเจ็กต์งาน
:error ข้อผิดพลาดที่ทำให้ต้องละทิ้ง

4.10 Action Cable

4.10.1 perform_action.action_cable

คีย์ ค่า
:channel_class ชื่อคลาสช่องสื่อสาร
:action การกระทำ
:data แฮชของข้อมูล

4.10.2 transmit.action_cable

คีย์ ค่า
:channel_class ชื่อคลาสช่องสื่อสาร
:data แฮชของข้อมูล
:via ผ่าน

4.10.3 transmit_subscription_confirmation.action_cable

คีย์ ค่า
:channel_class ชื่อคลาสช่องสื่อสาร

4.10.4 transmit_subscription_rejection.action_cable

คีย์ ค่า
:channel_class ชื่อคลาสช่องสื่อสาร

4.10.5 broadcast.action_cable

คีย์ ค่า
:broadcasting การกระจายชื่อ
:message แฮชของข้อความ
:coder โคเดอร์

4.11 Active Storage

4.11.1 preview.active_storage

คีย์ ค่า
:key โทเค็นความปลอดภัย

4.11.2 transform.active_storage

4.11.3 analyze.active_storage

คีย์ ค่า
:analyzer ชื่อตัววิเคราะห์ เช่น ffprobe

4.12 Active Storage — Storage Service

4.12.1 service_upload.active_storage

คีย์ ค่า
:key โทเค็นความปลอดภัย
:service ชื่อของบริการ
:checksum เช็คซัมเพื่อให้แน่ใจว่าคงสภาพ

4.12.2 service_streaming_download.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ

4.12.3 service_download_chunk.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ
:range ช่วงไบต์ที่พยายามอ่าน

4.12.4 service_download.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ

4.12.5 service_delete.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ

4.12.6 service_delete_prefixed.active_storage

คีย์ ค่า
:prefix คำนำหน้าคีย์
:service ชื่อบริการ

4.12.7 service_exist.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ
:exist ไฟล์หรือบล็อบมีหรือไม่มี

4.12.8 service_url.active_storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ
:url URL ที่สร้างขึ้น

4.12.9 service_update_metadata.active_storage

เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้บริการ Google Cloud Storage

คีย์ ค่า
:key โทเค็นที่ปลอดภัย
:service ชื่อบริการ
:content_type ฟิลด์ HTTP Content-Type
:disposition ฟิลด์ HTTP Content-Disposition

4.13 Action Mailbox

4.13.1 process.action_mailbox

คีย์ ค่า
:mailbox อินสแตนซ์ของคลาส Mailbox ที่สืบทอดมาจาก ActionMailbox::Base
:inbound_email แฮชที่มีข้อมูลเกี่ยวกับอีเมลที่เข้ารับการประมวลผล
{
  mailbox: #<RepliesMailbox:0x00007f9f7a8388>,
  inbound_email: {
    id: 1,
    message_id: "[email protected]",
    status: "processing"
  }
}

4.14 Railties

4.14.1 load_config_initializer.railties

คีย์ ค่า
:initializer เส้นทางของไฟล์เริ่มต้นที่โหลดใน config/initializers

4.15 Rails

4.15.1 deprecation.rails

คีย์ ค่า
:message ข้อความเตือนการเลิกใช้งาน
:callstack ตำแหน่งที่เกิดการเลิกใช้งาน
:gem_name ชื่อเจ็มที่รายงานการเลิกใช้งาน
:deprecation_horizon เวอร์ชันที่พฤติกรรมที่เลิกใช้งานจะถูกลบออก

5 ข้อยกเว้น

หากเกิดข้อยกเว้นขึ้นในระหว่างการใช้งานเครื่องมือวัด ข้อมูลในเครื่องมือวัดจะรวมข้อมูลเกี่ยวกับข้อยกเว้นด้วย

คีย์ ค่า
:exception อาร์เรย์ที่มีสองสมาชิก ชื่อคลาสของข้อยกเว้นและข้อความ
:exception_object ออบเจกต์ข้อยกเว้น

6 สร้างเหตุการณ์ที่กำหนดเอง

การเพิ่มเหตุการณ์ที่กำหนดเองง่ายเช่นกัน Active Support จะดูแลการทำงานหนักให้คุณ คุณเพียงแค่เรียกใช้ ActiveSupport::Notifications.instrument พร้อมกับ name, payload, และบล็อก การแจ้งเตือนจะถูกส่งหลังจากที่บล็อกสิ้นสุดลง Active Support จะสร้างเวลาเริ่มต้นและเวลาสิ้นสุด และเพิ่ม ID ของเครื่องมือวัดที่ไม่ซ้ำกัน ข้อมูลทั้งหมดที่ส่งเข้าไปในการเรียกใช้ instrument จะถูกส่งไปยังเครื่องมือวัด นี่คือตัวอย่าง:

ActiveSupport::Notifications.instrument "my.custom.event", this: :data do
  # ทำสิ่งที่คุณต้องการทำที่นี่
end

ตอนนี้คุณสามารถฟังก์ชันเหตุการณ์นี้ได้ด้วย:

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

คุณยังสามารถเรียกใช้ instrument โดยไม่ต้องส่งบล็อกได้เช่นกัน ซึ่งจะช่วยให้คุณใช้โครงสร้างการใช้เครื่องมือสื่อสารอื่นได้

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

คุณควรปฏิบัติตามคำแนะนำของ Rails เมื่อกำหนดเหตุการณ์ของคุณเอง รูปแบบคือ: event.library ถ้าแอปพลิเคชันของคุณกำลังส่งทวีต คุณควรสร้างเหตุการณ์ที่ชื่อว่า tweet.twitter

ข้อเสนอแนะ

คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้

กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้

คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ Edge Guides ก่อนเพื่อตรวจสอบ ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก ตรวจสอบ คู่มือแนวทาง Ruby on Rails เพื่อดูรูปแบบและกฎเกณฑ์

หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา เปิดปัญหา.

และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails.