2012-05-15 39 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' 

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