我正在开发一个可以在 Ruby 1.9.3 上运行的 gem,但是安装最新的 Gemfile 只能在 Ruby 2.2 上运行。有没有办法根据 Ruby 版本分离依赖关系?
我过去见过这种方法:
pry_debugger = RUBY_VERSION < '2.0.0' ? 'pry-debugger' : 'pry-byebug'
spec.add_development_dependency pry_debugger
或者我应该考虑支持一个 Ruby 版本(比如说 2.0)并找到支持的 gems?查找哪些 gem 可在我的本地 Ruby 版本上运行的最简单方法是什么?
最佳答案
像您展示的逻辑对于开发依赖项来说可以很好地工作,因为它将在 bundle 安装时进行评估。
它不适用于运行时依赖项,因为逻辑将在 gem 构建时评估,而不是在 gem 在另一个环境中运行时评估。 RubyGems 不提供一种方法让您根据运行时环境指定不同的 gem,因此您支持的唯一方法是使用不同的 gemspec 发布两个不同命名的 gem 版本。
就我个人而言,我不认为将开发依赖项放入 .gemspec 中有何意义,因此我总是将这些依赖项添加到我的 Gemfile 中,并仅为运行时依赖项保留 gemspec。 这更好地分离了关注点,并明确了 gem 选择逻辑可以在 Gemfile 中使用,但不能在 gemspec 中使用。
关于ruby-on-rails - 根据 Ruby 版本管理 gem 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346334/