2010-04-18 14 views
37

Khi tôi viết debugger nó không khởi động:Ruby on Rails: gỡ lỗi nhiệm vụ cào

NoMethodError: undefined method `run_init_script' for Debugger:Module 
from /usr/local/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.3/lib/ruby-debug-base.rb:239:in `debugger' 
from (irb):4 

Nếu tôi chạy rake my:task --debugger, nó sẽ trả tôi để an ủi ngay lập tức. Làm thế nào là nó có thể gỡ lỗi nhiệm vụ rake?

Trả lời

25

Câu trả lời của Andrey Kouznetsov không có tác dụng đối với tôi khi sử dụng Ruby 1.9.3. Đá quý ruby-debug dường như không hỗ trợ Ruby 1.9. Tôi đã phải sử dụng đá quý trình gỡ lỗi: https://github.com/cldwalker/debugger.

  1. Thêm gem 'debugger' vào nhóm phát triển của Gemfile của tôi.
  2. Chạy bundle.
  3. Thêm require 'debugger' vào đầu tác vụ cào của tôi.
  4. Thêm cuộc gọi đến debugger nơi tôi muốn có điểm ngắt trong tác vụ cào của mình.
  5. Chạy tác vụ cào thông thường từ dòng lệnh, ví dụ: rake my:task.
+0

Cảm ơn câu trả lời mới –

+2

Một tùy chọn khác thay vì đặt 'debugger' yêu cầu 'ở trên cùng là đặt inline debug' require '; debugger'. Bằng cách đó, khi bạn xóa các câu lệnh 'debugger', bạn sẽ không quên xóa' require'. – wisbucky

38

Tôi đã tìm ra giải pháp.

$ gem install ruby-debug 
$ ruby-debug rake my:task 

hoặc trên một số hệ thống

$ rdebug rake my:task 
+2

Thực sự là bạn không nên làm một lượng lớn logic trong một tác vụ cào. Hầu hết các nhiệm vụ cào của tôi là một lớp lót gọi một phương thức trên một mô hình mà sau đó được bao phủ đầy đủ với các thử nghiệm. –

+0

Tôi đang làm nhện dựa trên cơ giới hóa và tôi cần gỡ lỗi một số dòng. Tất cả chúng trong các phương pháp và chưa được kiểm tra. Cảm ơn bạn đã trả lời. –

+0

@rspeicher, nó hữu ích nếu bạn có một nhiệm vụ hạt giống –

6

Cách tiếp cận này không làm việc cho tôi. Tôi vừa thêm mã này vào mã của tôi:

require 'ruby-debug' 
# ... code ... 
debugger 
+0

Thx! Lưu ngày của tôi! –

8

tôi khuyên bạn nên pry cho điều này

bundle install pry 
require 'pry' 
rake ... 

Trong nhiệm vụ cào của bạn file:

binding.pry 
0

Visual Studio Code có trình gỡ lỗi khá tốt, được tích hợp sẵn. Nếu ai phát hiện tìm kiếm này kiếm một cách để làm cho nó làm việc với cào, đây là một cấu hình làm việc:

{ 
    "name": "Debug a rake task", 
    "type": "Ruby", 
    "request": "launch", 
    "useBundler": true, 
    "cwd": "${workspaceRoot}", 
    "program": "/usr/local/bin/rake", 
    "args": ["all"] 
} 

này sẽ chạy nhiệm vụ cào all. Bạn có thể phải thay đổi đường dẫn đến cào, tôi đã không tìm cách để chạy một trong PATH.