如何在开发gem时使用’debugger’和’pry’? (ruby)

我正在开发一个gem,我的Gemfile看起来像这样:

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

但是,我不希望人们在运行测试时必须安装prydebugger ,但我也希望能够在我的测试中要求它们(因为我正在运行带有bundle exec前缀的测试,我无法得到它们在我的加载路径中,如果他们不在Gemfile中)。 我该如何实现这一目标?

另外,何时将用于开发的gem放在gemspec中,何时将它们放入Gemfile中? 我真的不知道区别。

您可以将gem作为开发依赖项添加到gemspec中,如下所示:

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

这些只会在处理gem时安装,而不是在安装gem本身时安装。

正如@ andrew-vit所说,您可以将它作为开发依赖项添加到您的gem规范中

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

由于这将是一个开发依赖项,您不希望在主gem应用程序中添加spec_helper.rb require 'pry' ,因此只需将其添加到spec_helper.rb或您的测试设置文件中。

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

然后,当您运行规范时,仍然可以将binding.pry添加到沙箱的代码中。 在推送代码之前,请确保您的规范已运行。 这样,如果它中断,你会发现你忘记了代码中的断点。

我找到了解决方案。 我可以把它们分组。

 source :rubygems gemspec group :development, :test do gem "rake" end gem "debugger", :group => :debugger gem "pry", :group => :pry 

这样贡献者可以选择不安装它们:

 bundle install --without debugger pry 

对我来说,上面的答案似乎有效。 我目前正在运行ruby 2.2.4并将其添加到.gempsec:

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

这对我的spec_helper.rb

 require 'pry' 

不确定这对任何人都有帮助。