如何在Bundler中解决Gem兼容问题?

Har*_*tor 5 ruby gem rubygems ruby-on-rails bundler

在我们的rails应用程序中,我们使用了两个需要的宝石(urbanairship和nylas)rest-client.一个人想要~> 1.6.7,另一个想要~> 1.7.1.

通常bundle udpate并rm Gemfile.lock; bundle install不起作用.

什么时候Bundler解决依赖关系,我们得到这个:

Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies............................................................................................................................................
Bundler could not find compatible versions for gem "rest-client":
  In Gemfile:
    urbanairship (~> 3.0.1) ruby depends on
      unirest (>= 1.1.2, ~> 1.1) ruby depends on
        rest-client (~> 1.6.7) ruby

    nylas (>= 0) ruby depends on
      rest-client (~> 1.7) ruby
Run Code Online (Sandbox Code Playgroud)

我们不能使用不幸版本的任何一个nylas或urbanairship.我们唯一的解决方案是分配两个中的一个并编辑.gemspec接受相同版本的rest-client.

有没有更简单的解决方案?

Har*_*tor 0

最后,最终听从了克里斯的建议。

  1. 分叉nylas https://github.com/hartator/nylas-ruby/

  2. 放宽了Gemfile对 的要求rest-client。(曾是1.7)

    gem 'rest-client', '~> 1.6'

  3. 放宽了nylas.gemspec对 的要求rest-client。(曾是1.7)

    s.add_dependency(%q<rest-client>, ["~> 1.6"])

  4. 放宽了nylas.gemspec对rest-client. (曾是1.7)

    s.add_runtime_dependency(%q<rest-client>, ["~> 1.6"])

  5. 运行规格,一切仍然通过。

  6. 将更改后的 gem 添加到我的应用程序中Gemfile

    gem 'nylas', git: 'git@github.com:hartator/nylas-ruby.git'

一切正常。仍然想知道是否有更清洁的解决方案。

参考:https://github.com/hartator/nylas-ruby/commit/f7ff4076e96d8a31e223ca0f12d35811d6e9d811