2012-03-04 20 views
17

Tôi đang cố gắng sử dụng quản đốc để bắt đầu ứng dụng đường ray của tôi. Thật không may, tôi gặp khó khăn khi kết nối IDE để gỡ lỗi.Làm thế nào để gỡ lỗi một ứng dụng đường ray (3.2) bắt đầu bởi quản đốc?

tôi đọc here về việc sử dụng

Debugger.wait_connection = true 
Debugger.start_remote 

để bắt đầu một phiên gỡ lỗi từ xa, nhưng điều đó không thực sự làm việc ra.

Câu hỏi: Có cách nào để gỡ lỗi ứng dụng đường ray (3.2) do người quản đốc bắt đầu không? Nếu vậy, cách tiếp cận là gì?

Trả lời

28

Nếu bạn sử dụng một số công nhân với môi trường đầy đủ đường ray bạn có thể sử dụng khởi tạo sau:

# Enabled debugger with foreman, see https://github.com/ddollar/foreman/issues/58 
if Rails.env.development? 
    require 'debugger' 
    Debugger.wait_connection = true 

    def find_available_port 
    server = TCPServer.new(nil, 0) 
    server.addr[1] 
    ensure 
    server.close if server 
    end 

    port = find_available_port 
    puts "Remote debugger on port #{port}" 
    Debugger.start_remote(nil, port) 
end 

Và trong nhật ký của quản đốc, bạn sẽ có thể tìm thấy cổng debugger của:

$ foreman start 
12:48:42 web.1  | started with pid 29916 
12:48:42 worker.1 | started with pid 29921 
12:48:44 web.1  | I, [2012-10-30T12:48:44.810464 #29916] INFO -- : listening on addr=0.0.0.0:5000 fd=10 
12:48:44 web.1  | I, [2012-10-30T12:48:44.810636 #29916] INFO -- : Refreshing Gem list 
12:48:47 web.1  | Remote debugger on port 59269 
12:48:48 worker.1 | Remote debugger on port 41301 

Bây giờ chạy trình gỡ lỗi bằng cách sử dụng:

rdebug -c -p [PORT] 
+0

Rõ ràng, bạn cần thêm nhiều phiếu bầu. Nhờ bạn, tôi * cuối cùng * đã làm việc này. Cảm ơn! – Jimmy

+0

Để hoàn thành, bước cuối cùng là kết nối với trình gỡ rối trong một trình bao riêng biệt với 'rails -c -p [PORT]' – Philipp

+1

@Philipp - Ý của bạn là '' 'rdebug -c -p [PORT]' ''? Sử dụng lệnh '' 'rails''' không làm việc cho tôi. –

3

Một cách tiếp cận là yêu cầu trình gỡ lỗi bình thường trong gemfile của bạn và thêm debugger bình thường vào mã của bạn nếu cần. Khi máy chủ truy cập vào dòng đó, nó sẽ dừng lại, nhưng người quản đốc sẽ không tiết lộ về nó. Trong bảng điều khiển foreman, bạn có thể một cách mù quáng loại irb và chỉ khi đó bạn mới thấy lời nhắc xuất hiện. Bad UX, phải không?

khác (chử dùng thêm) cách tiếp cận là để đuôi các bản ghi của bạn:

tail -f log/development.log 

Hope this helps.

Các vấn đề liên quan