Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การดีบักระยะไกลด้วย Byebug, Rails และ Pow

หากคุณไม่เคยเห็น byebug มาก่อน เราขอแนะนำให้คุณลองดู มันเป็นดีบักเกอร์ที่ยอดเยี่ยมสำหรับ Ruby 2.x ในคำพูดของผู้เขียน:

Byebug เป็นโปรแกรมดีบั๊กที่ใช้งานง่ายและมีคุณลักษณะหลากหลายสำหรับ Ruby 2 โดยจะใช้ TracePoint API ใหม่สำหรับการควบคุมการดำเนินการและ Debug Inspector API ใหม่สำหรับการนำทางสแต็กการโทร ดังนั้นจึงไม่ขึ้นอยู่กับแหล่งที่มาหลักภายใน ได้รับการพัฒนาเป็นส่วนขยาย C ดังนั้นจึงรวดเร็ว และมีชุดทดสอบเต็มรูปแบบจึงเชื่อถือได้

การตั้งค่าพื้นฐานค่อนข้างง่าย เพียงแค่ติดตั้งอัญมณี หากคุณใช้ byebug เมธอดที่ใดก็ได้ในโค้ดของคุณ การดำเนินการจะหยุด ณ จุดนั้น และคุณจะถูกทิ้งลงในคอนโซลการดีบัก ตั้งค่าให้ใช้ pry ได้เลย

ตัวอย่างเช่น ฉันสามารถเรียกใช้ดีบักเกอร์ดังนี้:

require 'byebug'

def my_method
  a = 1
  byebug
end

my_method()

ถ้าฉันเรียกใช้ไฟล์นั้น ฉันจะถูกทิ้งลงในโปรแกรมแก้ไขข้อบกพร่อง

การดีบักระยะไกลด้วย Byebug, Rails และ Pow เมื่อดีบักเกอร์ทำงาน มันจะนำคุณเข้าสู่เชลล์แบบโต้ตอบ

ปัญหาของ Pow

ไม่เป็นไรถ้าคุณสามารถเรียกใช้แอปบนบรรทัดคำสั่งได้ แต่ถ้าคุณกำลังพัฒนาแอป Rails โดยใช้ pow เพื่อให้บริการในพื้นที่ล่ะ

Pow เช่นเดียวกับเซิร์ฟเวอร์แอปส่วนใหญ่ ทำงานในพื้นหลัง ดังนั้นแม้ว่าคุณจะหยุดการดำเนินการและเรียกใช้โปรแกรมดีบั๊ก คุณก็จะไม่สามารถโต้ตอบกับมันได้!

โชคดีที่ byebug มีกลไกสำหรับการดีบักจากระยะไกล

หากคุณไม่คุ้นเคยกับการดีบักระยะไกล นี่เป็นแนวคิดง่ายๆ เมื่อเรียกใช้เมธอด byebug แทนที่จะดัมพ์คุณไปยังเชลล์แบบโต้ตอบ โปรแกรมดีบั๊กจะเปิดเซิร์ฟเวอร์พิเศษของตัวเอง จากนั้นคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ดีบักนี้โดยใช้ไคลเอ็นต์บรรทัดคำสั่ง

การดีบักระยะไกลมีลักษณะอย่างไร

ขั้นแรก ฉันเรียกวิธีบายบั๊กไปยังการทำงานของตัวควบคุม

class PagesController < ApplicationController
  def index
    if user_has_never_signed_in? && request.subdomain == "www"
      @hero_bg = ab_test("hero_bg", "control", "variable")
    else
      @hero_bg = "control"
    end

    byebug

  end
end

ประการที่สอง ฉันขอดำเนินการดังกล่าว การเชื่อมต่อดูเหมือนจะหยุดทำงาน

การดีบักระยะไกลด้วย Byebug, Rails และ Pow คำขอเว็บที่ทริกเกอร์โปรแกรมดีบั๊กไม่โหลด

สุดท้าย ฉันเปลี่ยนไปใช้ไคลเอ็นต์บายบัก ซึ่งแสดงคอนโซลดีบักเกอร์ตรงจุดที่ฉันระบุ

การดีบักระยะไกลด้วย Byebug, Rails และ Pow การทำงานของตัวดีบักระยะไกลโดยดีบัก

การตั้งค่าการดีบักระยะไกลด้วย byebug

หากคุณยังไม่ได้ติดตั้งอัญมณี ให้ติดตั้งได้เลย

# Gemfile

gem "byebug", group: "development"

ต่อไป เราต้องเพิ่มตัวเริ่มต้นให้กับแอพ rails ของเราที่เริ่มต้นเซิร์ฟเวอร์ byebug เมื่อใดก็ตามที่ pow เริ่มแอพ rails ของเรา ตัวเลือกจริงเพียงอย่างเดียวที่คุณต้องระบุคือหมายเลขพอร์ต โค้ดด้านล่างให้คุณกำหนดค่านั้นผ่านตัวแปรสภาพแวดล้อม

เมื่อคุณเพิ่มตัวเริ่มต้นนี้แล้ว คุณอาจต้องรีสตาร์ทแอปเพื่อให้แน่ใจว่าโหลดเสร็จแล้ว

# config/initializers/byebug.rb

if Rails.env.development?
  Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i
end

สุดท้าย คุณจะต้องเรียกใช้บายบักไคลเอนต์และบอกให้รู้ว่าจะหาเซิร์ฟเวอร์ของเราได้ที่ไหน จากนั้นไคลเอ็นต์จะนั่งรอให้ทริกเกอร์การดีบักเกิดขึ้น

หากคุณใช้พอร์ตอื่น คุณจะต้องแทนที่ที่นี่

bundle exec byebug -R localhost:1048

แค่นั้นแหละ! ถึงเวลาเริ่มต้นการดีบัก