Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Remote Debugging trong Rails với Byebug và Pow: Hướng dẫn từng bước

Nếu bạn chưa thấy byebug trước đây, tôi khuyên bạn nên xem nó. Đây là debugger tuyệt vời cho Ruby 2.x. Theo tác giả:

Byebug là debugger đơn giản, giàu tính năng cho Ruby 2. Nó dùng TracePoint API mới để kiểm soát thực thi và Debug Inspector API mới để điều hướng call stack, nên không phụ thuộc vào core sources nội bộ. Nó được phát triển như C extension, nên nhanh. Và có full test suite nên tin cậy.

Thiết lập cơ bản khá đơn giản. Chỉ cần cài gem. Nếu bạn dùng phương thức byebug bất kỳ đâu trong code, thực thi sẽ dừng tại điểm đó và bạn được đưa vào debug console. Bạn thậm chí có thể setup dùng pry.

Ví dụ, tôi có thể gọi debugger như sau:

require 'byebug' def my_method a = 1 byebug end my_method() 

Nếu chạy file đó, tôi bị đưa vào debugger.

Remote Debugging trong Rails với Byebug và Pow: Hướng dẫn từng bước Khi debugger được kích hoạt, nó đưa bạn vào shell tương tác.

Vấn đề với Pow

Điều đó ổn nếu bạn chạy app trên command line. Nhưng nếu bạn đang develop Rails app dùng pow để serve local thì sao?

Pow, như hầu hết app server, chạy trong background. Vì vậy ngay cả khi bạn dừng được thực thi và chạy debugger, bạn cũng không thể tương tác với nó!

May mắn thay, byebug cung cấp cơ chế remote debugging.

Nếu bạn không quen với remote debugging, khái niệm rất đơn giản. Khi phương thức byebug được gọi, thay vì đưa bạn vào shell tương tác, debugger khởi động server đặc biệt của nó. Sau đó bạn có thể kết nối đến debug server này dùng command-line client.

Remote debugging trông như thế nào?

Thứ nhất, tôi gọi phương thức byebug trong một controller action

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 

Thứ hai, tôi làm request đến action đó. Kết nối có vẻ treo.

Remote Debugging trong Rails với Byebug và Pow: Hướng dẫn từng bước Web request kích hoạt debugger không load

Cuối cùng, tôi chuyển sang byebug client, đang hiển thị debugger console chính tại điểm tôi chỉ định.

Remote Debugging trong Rails với Byebug và Pow: Hướng dẫn từng bước Byebug remote debugger đang hoạt động

Thiết lập remote debugging với byebug

Nếu chưa có gem, hãy cài đặt.

# Gemfile gem "byebug", group: "development" 

Tiếp theo, cần thêm initializer cho Rails app khởi động byebug server mỗi khi pow khởi động Rails app. Tùy chọn thực sự cần thiết chỉ là port number. Code dưới cho phép cấu hình qua biến môi trường.

Sau khi thêm initializer, bạn có thể cần restart app để chắc chắn nó đã load.

# config/initializers/byebug.rb if Rails.env.development? Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i end 

Cuối cùng, bạn cần chạy byebug client và nói cho nó biết server ở đâu. Client sẽ ngồi chờ debug trigger xảy ra.

Nếu bạn dùng port khác, cần thay thế ở đây.

bundle exec byebug -R localhost:1048 

Xong! Đã sẵn sàng debug.