2013-08-07 36 views
11

Tôi đang cố gắng gỡ lỗi một gem được sử dụng bởi ứng dụng Rails.Sử dụng Pry trong đá quý mà không cần sửa đổi Gemfile hoặc sử dụng `require`

tôi nhân bản các Gem tại địa phương để đi tò mò xung quanh (và cũng có thể cho phép tôi làm những điều tốt đẹp như git bisect vv)

# Gemfile 
gem "active_admin", path: "~/dev-forks/active_admin" 

Tuy nhiên, tôi thường bị mắc kẹt với việc thêm Pry đến một nơi nào đó để Gemfile có thể sử dụng hoặc gọi require "pry" trực tiếp trong mã ngay cả khi tôi không muốn nó ở đó. Ví dụ, đôi khi tôi sẽ quên nó, sửa lỗi, và sau đó cam kết với dự án với Pry trong Gemfile.

Tôi không nên làm điều đó, LoadError sẽ phát sinh, cannot load such file -- pry (LoadError).

Tôi phải quản trị Tôi bị mất một chút giữa các ngữ cảnh khác nhau (dự án Rails, Gem, Ruby cục bộ) và đá quý thực tế (Gemfile, require, installed).

Tôi làm cách nào để sử dụng binding.pry trong Đá quý trong Rails mà không cần sự can thiệp của Gemfiles?

+3

Tôi cũng gặp vấn đề tương tự. Một kỹ thuật tôi đã xem xét (nhưng không thực hiện) đã sử dụng git hooks để kiểm tra sự xuất hiện của 'pry' bên trong mã của tôi trong quá trình commit. Sau đó, trong Gemfile của Rails, thêm pry vào nhóm phát triển; trong gem's, thêm pry vào Gemfile (không phải gemspec.) –

+0

Các bài kiểm tra unit của bạn cũng sẽ thất bại nếu bạn có 'pry' bám vào một nơi nào đó. –

Trả lời

1

nếu bạn muốn sử dụng và gỡ lỗi một gem trong ứng dụng đường ray của mình, thì nó sẽ nằm trong nhóm phát triển và thử nghiệm của Gemfile trong ứng dụng của bạn.

bạn có thể sử dụng các công cụ như trình gỡ lỗi nâng cao https://github.com/nixme/pry-debugger để đặt điểm ngắt trong phiên tăng cường break SomeClass#run.

tôi nghĩ rằng nó hợp lệ để thêm pry cho mỗi dự án mà tôi ngã ba để sửa lỗi hoặc đóng góp nội dung. chỉ cần không đặt nó trong các tập tin .gemspec.

nếu bạn đang đẩy binding.pry thay đổi đối với repo của mình, bạn nên thêm các móc cam kết như Jim đã chỉ ra. Tôi không nghĩ rằng đây là một vấn đề liên quan đến pry, nó phụ thuộc vào bạn quan tâm đến bao nhiêu khi xem xét sự khác biệt của bạn trước khi đẩy nó ra.

+0

pry-byebug là một công cụ tuyệt vời: https://github.com/deivid-rodriguez/pry-byebug –

6

Jon từ quá khứ! Như bạn đã biết, tôi có câu trả lời cho (gần như) tất cả các vấn đề của bạn. Trong trường hợp này, bạn đang thực sự mô tả hai vấn đề: (a) bạn không thể require 'pry' khi Pry không có trong Gemfile, (b) bạn không thể sử dụng Pry nếu bạn không require nó.

gì Bundler có, như Conrad Irwin writes:

Bundler là một viên ngọc tuyệt vời mà cung cấp cho bạn một mức độ tốt của sự tự tin rằng "nếu nó hoạt động trong phát triển, nó hoạt động trong sản xuất". Nó có thể làm điều này bằng cách luẩn quẩn về phụ thuộc đá quý: nếu nó không có trong Gemfile, nó không được yêu cầu. Nó cũng đảm bảo rằng môi trường phát triển của mọi người giống hệt nhau, không còn "nó hoạt động trên máy của tôi" cắt nó như một cái cớ.

Có những trường hợp khi cống hiến giáo lý này cho nhiệm vụ có thể cản trở. Đặc biệt tất cả các nhà phát triển giỏi đã thiết lập môi trường phát triển của họ rất cá nhân. Rõ ràng, nó không quan trọng là các công cụ địa phương của tôi hoạt động trong sản xuất, và nó tích cực xấu cho năng suất nếu mọi người buộc phải có một thiết lập phát triển nhận dạng.

Vì vậy, trong thực hiện tất cả những điều tốt đẹp Bundler làm cho chúng ta phát triển Ruby, nó đi kèm theo thiết kế với một caveat: "những gì ngoài bó/Gemfile (ví dụ như hệ thống đá quý) không tồn tại nữa."Làm thế nào nó được thực hiện bằng cách xác định lại quy trình require và thay đổi PATH của bạn để nó chỉ thấy những gì có trong gói.

Điều đó có nghĩa là bạn không thể sử dụng Pry mà không gây ô nhiễm Gemfile, đúng không? Conrad Irwin là một chiếc bánh quy nhỏ thông minh mà anh ta có, đã đưa ra một giải pháp và thực hiện Pry Debundle, một viên đá quý tạm thời đảo ngược các bản vá lỗi mà Bundler đã thực hiện theo yêu cầu của chúng tôi. Oh ... chờ đã, Yep, Debundle có lẽ không có trong Gemfile.

Việc sửa lỗi khỉ là sao chép mã nguồn của pry-debundle.rb đến ~/debundle.rb và sau đó là load. (Hiện tại, bạn sẽ cần Pry được nạp để chạy tệp nguồn đó, nhưng bạn chỉ có thể chạy phương thức debundle! để đến đó, yêu cầu Pry, và đi tò mò xung quanh. Một chút bắt chước là cần thiết, nhưng tôi đang làm việc trên một PR .)

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