【问题标题】:bundler --without is not excluding gem installation of provided groupsbundler --without 不排除 gem 安装提供的组
【发布时间】:2016-02-17 10:22:17
【问题描述】:

我有以下 Gemfile

source "http://rubygems.org"

gem "bundler", "1.10.6"
gem "unicorn", "4.8.2"

group :supply do
  gem "backup", "4.1.10"
end

group :bunker do
  gem "capistrano", "3.4.0"
  gem "capistrano-rbenv", "2.0.3"
  gem "capistrano-bundler", "1.1.4"
  gem "capistrano-rails", "1.1.3"
  gem "capistrano-nc", "0.1.4"
end

group :reinforcement do
  gem "actionview", "4.2.1"
  gem "actionmailer", "4.2.1"
  gem "mail", "2.6.3"
  gem "daemons", "1.2.3"
  gem "tmail", "1.2.7.1"
  gem "activerecord", "4.2.1"
  gem "starling", "0.10.1"
end

我有多种类型的服务器,并希望在特定服务器上安装特定的 gem,例如。仅在供应服务器等上备份 gem。

当我运行以下捆绑安装命令时

bundle install --clean --without supply bunker --path /tmp/

我收到以下错误。

Bundler could not find compatible versions for gem "mail":
  In Gemfile:
    mail (>= 2.5.4, ~> 2.5) ruby

    backup (= 4.1.10) ruby depends on
      mail (= 2.5.4) ruby

    mail (= 2.6.3) ruby

如果without 是排除某个组的gem,那么该命令应该可以正常运行,因为它不应该尝试安装邮件和备份,因为它们不在同一个组中。

我是否遗漏了什么或做错了什么?

【问题讨论】:

  • 你的例子有缺陷。您不会排除引用 mail gem 的 reinforcement 组。
  • @Mihai-AndreiDinculescu,但我排除了supply 组,这意味着它应该尝试安装backup gem。
  • 但是你的错误信息说backup 依赖于mail
  • 正确,当有依赖包时,将安装 gem 所需的特定版本,例如。 backup 依赖于mail=2.5.4,这里的冲突是它还尝试安装mail gem 版本2.6.3,它在不同的组中并且被排除在外。

标签: ruby-on-rails ruby rubygems bundler


【解决方案1】:

发现捆绑器甚至在组之间检查是否存在冲突以确保一致性。

这是article 结帐Consistency 部分。

这意味着即使bundler 不会在其他组中安装 gem,它仍然会确保所有组中的 gem 之间没有冲突的依赖关系。

我必须为每个服务器创建多个 GemfileGemfile.lock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多