2012-05-15 36 views
1

我正在開發一個寶石,和我的Gemfile看起來像這樣:如何在開發寶石時使用'調試器'和'撬'? (紅寶石)

source :rubygems 

gemspec 

group :development, :test do 
    gem "pry" 
    gem "debugger" 
    gem "rake" 
end 

不過,我不希望人們有運行測試時安裝prydebugger,但我也想能夠在我的測試中要求他們(因爲我正在運行以bundle exec爲前綴的測試,並且如果他們不在Gemfile中,我無法將它們加載到我的加載路徑中)。我如何實現這一目標?

另外,什麼時候把gemspec中用於開發的gem放在什麼地方,什麼時候放在gemfile中呢?我真的不知道區別。

+0

您是否自動生成您的gemspec? – Reactormonk

+0

這是什麼意思? –

回答

5

您可以向gemspec添加寶石作爲發展的依賴,就像這樣:

Gem::Specification.new do |s| 
    # ... 
    s.add_development_dependency 'pry' 
    s.add_development_dependency 'debugger' 
    s.add_development_dependency 'rake' 
end 

這些不僅會在處理寶石時安裝,而不是在安裝寶石本身時安裝。

+0

嗯,這對我不起作用,我們是否還需要添加明確的要求? –

+1

@PeterP。我不得不添加明確的要求以及... – s2t2

1

我找到了解決方案。我可以把他們分組。

source :rubygems 

gemspec 

group :development, :test do 
    gem "rake" 
end 

gem "debugger", :group => :debugger 
gem "pry",  :group => :pry 

通過這種方式,投稿人可以選擇不安裝它們:

bundle install --without debugger pry 
2

正如@安德魯-VIT說,你可以把它添加到您的寶石規格發展依賴

Gem::Specification.new do |spec| 
    #... 
    spec.add_development_dependency "pry" 
    spec.add_development_dependency "debugger" 
    #... 
end 

由於這將是一個發展的依賴,你不希望添加require 'pry'到主寶石應用程序,所以只需將其添加到您的spec_helper.rb或任何您的測試設置文件。

require 'rspec' 
require 'vcr' 
require 'pry' 
#... 

然後,當你運行你的規範,你仍然可以添加您binding.pry成沙箱的代碼。確保您的規格在推送您的代碼之前運行。這樣,如果中斷,你會看到你忘記了代碼中的斷點。

0

對於我來說,上面的答案混合似乎工作。我目前正與紅寶石2.2.4,並添加此向.gempsec運行:

s.add_development_dependency 'pry-byebug' 
s.add_development_dependency 'rake' 

,這對我的spec_helper.rb:如果

require 'pry' 

不知道,可以幫助任何人。