2013-08-07 32 views
11

我正在嘗試調試Rails應用程序使用的Gem。在Gem中使用Pry而不修改Gemfile或使用`require`

我克隆寶石本地去撬左右(也可以讓我做好事,如git bisect等)

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

不過,我經常堅持將撬起一個Gemfile中某處能夠使用它,或者撥打require "pry"住在代碼中,即使我不想在那裏。例如,我有時會忘記它,修正錯誤,然後使用Gemfile中的Pry提交項目。

如果我不這樣做,LoadError會出現,cannot load such file -- pry (LoadError)。我需要管理員我在不同的上下文(Rails項目,Gem,本地Ruby)和實際的Gem(Gemfile,require,installed)之間有點失落。

如何在不使用Gemfiles的情況下在軌道中的Gem中使用binding.pry

+3

我也有同樣的問題。我考慮過的一種技術(但沒有實現)是在提交過程中使用git掛鉤來檢查代碼中是否出現「pry」。然後在Rails的Gemfile中,向開發組添加pry;在gem's中,添加pry到Gemfile(不是gemspec)。 –

+0

如果你有'pry'在某處附近,你的單元測試也應該失敗。 –

回答

1

如果你想在你的rails應用程序中使用和調試一個gem,那麼它應該在應用程序的Gemfile的開發和測試組中。

您可以使用像pry-debugger https://github.com/nixme/pry-debugger這樣的工具在您的pry會話break SomeClass#run中設置斷點。

我認爲將pry添加到每個項目中是有效的,我會爲修復bug或貢獻一些東西而分叉。只是不要把它放在.gemspec文件中。

如果您要將binding.pry更改爲您的回購,則應添加像Jim指出的提交掛鉤。我不認爲這是一個撬相關的問題,它取決於您在推出差異前審查差異時多少照顧。

+0

pry-byebug也是一個不錯的工具:https://github.com/deivid-rodriguez/pry-byebug –

6

喬恩從過去!如你所知,我已經(幾乎)所有問題的答案。在這種情況下,你實際上描述了兩個問題:(a)當Pry不在Gemfile中時,你不能require 'pry',(b)如果你沒有require那麼你不能使用Pry。

什麼捆紮機不一致,如康拉德·歐文writes

捆紮機是一個真棒寶石,讓你一個很好的置信度,「如果它在發展,它在生產」。它可以通過對gem依賴關係進行惡意操作來實現:如果它不在Gemfile中,則不需要。它也確保了每個人的開發環境都是一樣的,不再有「它在我的機器上運行」作爲藉口削減它。

有些情況下,這種教條奉獻的責任可以阻礙。特別是所有優秀的開發人員都非常親自設置開發環境。顯然,我的本地工具在生產環境中工作並不重要,如果每個人都被迫設置一個標準的開發環境,這對生產效率就不利了。

所以在做所有的好東西捆紮機爲我們做Ruby開發者,它涉及通過設計一個警告:「什麼是包/ Gemfile文件(例如,系統GEMS)外不存在了。「它怎麼說是重新定義require過程,並改變你的PATH,使之僅僅看到的是在包中。

這意味着你不能沒有污染的Gemfile使用撬可言,你說是吧?不這麼快。康拉德·歐文作爲聰明的小餅乾,他想出了一個解決方案,並取得Pry Debundle,創業板暫時逆轉捆紮機我們需要做的補丁。

因此,所有你需要做的僅僅是require 'pry-debundle'然後,對吧?哦......等等。是的,Debundle可能不在Gemfile中。

猴子的修復是硬拷貝的源碼至~/debundle.rb,然後load。 (現在,您需要Pry加載才能運行該源文件,但您只能運行debundle!方法到達目標位置,需要Pry,並且可以四處查看。需要一點小小的monkeypatching,但我正在研究PR )

相關問題