ruby-on-rails - 根据 Ruby 版本管理 gem 依赖项

标签 ruby-on-rails ruby rubygems

我正在开发一个可以在 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/

相关文章:

sql - ActiveRecord 的意外行为包括

ruby-on-rails - Codeship 在 rails-devise-roles 测试中中断

ruby-on-rails - Rails 3 - 使用 LIKE 搜索合并的 2 列

javascript - Rails - 为什么 ajax 不发送参数到 GET 请求

ruby - gem安装编码错误

ruby-on-rails - bundle 安装不起作用 - Rails 4.0

ruby - Ruby 读取 "do"和 "end"的方式与读取 "{"和 "}"的方式相同吗?

ruby - 使用 jekyll 插件将元数据添加到液体模板

ruby-on-rails - 如何使用 googlecharts gem?

ruby-on-rails - Rails 金钱 gem 和表单生成器