【问题标题】:How to add "pry" when developing a Ruby gem开发 Ruby gem 时如何添加“pry”
【发布时间】:2013-08-20 12:36:04
【问题描述】:

我有一个叫做“某物”的宝石。

我想在开发 gem 时添加 pry 作为开发依赖项。但是我不知道如何加载它。

如果我在 lib/something.rb 中有“需要”,当我释放 gem 时,它会抛出 LoadError,因为 pry 只是一个开发依赖项。

同时我不想在提交代码时不断添加和删除 pry。

仅在开发应用程序时才需要 pry 的最佳方法是什么,而不需要它作为 gem 的依赖项?

【问题讨论】:

  • 类似的问题,但没有答案:stackoverflow.com/questions/18109735/…
  • 也许考虑一下您正在执行的代码需要可用的 pry 的上下文。如果它来自规范,则将要求放入spec_helper.rb(或等效项)。如果它来自 rake 任务,则将其放入 Rakefile。如果它来自原始脚本,则将 require 放在那里或使用 ruby -rpry 从命令行参数加载它

标签: ruby rubygems gem pry


【解决方案1】:

您可以在gemspec 文件中使用add_development_dependency。您仍然必须在 begin .. rescue LoadError 块内的 lib/something.rb 文件中 require 它。 (编辑 2,见下文)

在您的情况下,它将类似于以下内容:

spec.add_development_dependency 'pry', '~> 0.9.12.2'

add_development_dependency 的目的是将 gem 分成在执行 gem install mygem 时安装的依赖项与仅在执行 gem install mygem --development 时安装的development-only 依赖项。 p>

编辑:@Pierre-Louis Gottfrois 的解决方案

直接修改Gemfile,添加test组。 This question 描述了这个过程。根据Yehuda Katz,这似乎不是首选解决方案。

编辑 2:begin require ... rescue LoadError 显然是 Ruby 脚本的常见做法,根据这篇 Making Ruby Gems 文章。

【讨论】:

  • 这可以完美运行并且是可行的方法,但是它不适用于测试环境。您需要直接将 gem 添加到 Gemfiletest 组中。
  • 但是后来当我在生产中发布 gem 时,我仍然在 lib/something.rb 中有这个“require pry”,但是现在缺少“pry”,因为它是一个开发依赖项。如果我理解正确,我应该在发布之前删除“require pry”......这正是我想要避免的。
  • @antonevangelatov 也许在begin .. rescue LoadError 块中尝试条件require?类似this question
  • @user2062950 这肯定会工作,但感觉就像一个黑客。我想知道是否有一种“正确”的方法来做到这一点,即仅在开发中需要/加载某些 gem(pry、调试器等),而不必在部署/发布之前包含/排除它们。我不明白 add_development_dependency 的目的是什么,当您必须稍后添加“require”并确保将其删除时,因为未加载必要的 gem。如果每次都要手动添加“require”,不如手动添加必要的gem到gemspec或Gemfile中。
  • @antonevangelatov 添加了更多信息
【解决方案2】:

我想我找到了解决方法。 如果您将捆绑器配置为使用pry 作为您的控制台

$ bundle config console pry

那么pry 本身就是必需的,您不需要在源文件中明确要求。
此外,您还会获得按“↑”的历史记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多