【问题标题】:Rubygems: specify dependency on the latest version of a gemRubygems:指定对最新版本 gem 的依赖
【发布时间】:2015-01-30 19:32:37
【问题描述】:

我正在开发一个依赖于另一个 gem B 的 gem A。我需要我的 gem 的用户拥有最新版本的 B,无论它是什么。所以我想在我的 gemspec 中说类似

spec.add_dependency "B", :latest

原因是 B 包含一个数据库驱动程序,该驱动程序必须是最新版本,否则数据库会拒绝连接。

所以换句话说,我需要在使用我的 gem 之前强制 gem update。有没有办法在 gemspec 中做到这一点?

我知道我可以将版本指定为大于或小于某个固定版本,但这不是我想要的。

我也可以从 git 获取 gem 代码 - 但从 master 分支获取它通常与获取推送到 ruby​​gems 的最新“稳定”版本不同。

【问题讨论】:

    标签: ruby gem rubygems bundler


    【解决方案1】:

    这样的事情怎么样:

    require 'json'
    require 'uri'
    require 'open-uri'
    
    nokogiri_uri = URI('https://rubygems.org/api/v1/gems/nokogiri.json')
    
    version = nil
    
    open(nokogiri_uri) do |f|
      json_str = f.read
      puts json_str
    
      hash = JSON.parse json_str
      version = hash['version']
      puts version
    end
    
    if version
      spec.add_dependency "nokogiri", version
    else
      puts "My gem won't work because its dependencies are buggered."
    
    --output:--
    {"name":"nokogiri","downloads":33177312,"version":"1.6.6.2", ... }
    1.6.6.2
    

    由于文章How to Cure Net::HTTP’s Risky Default HTTPS Behavior,我使用了open-uri 而不是net/http 库。我不知道最新版本的 ruby​​ 是否解决了这个问题。

    【讨论】:

    • 我希望 ruby​​gems 中有一些隐藏的内置机制可以做到这一点,这会使 gemspec 复杂化一点......但它确实有效。谢谢!
    猜你喜欢
    • 2016-09-19
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多