Bundler无视'没有'组

时间:2016-04-20 09:29:29

标签: ruby bundler

我试图在开发中包含来自我本地的宝石而不是gemserver。我的Gemfile看起来像这样:

group :development do
  gem "appy_core", path: "../engines/core"
end

group :production do
  gem "appy_core", '1.7.4.5'
end

我的.bundle/config设置为:

---
BUNDLE_WITHOUT: production

然而,当我跑bundle时,我得到了:

 [!] There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements.
 You specified: appy_core (>= 0) and appy_core (= 1.7.4.5). Bundler cannot continue.

运行bundle install --without production会产生相同的结果。

2 个答案:

答案 0 :(得分:1)

我想出的唯一解决方案是:

Gemfile中的

gem 'appy_core', 
    git: 'git://github.com/.......',
    branch: '1.7.4.5' # put the name of the branch that corresponds

在本地环境的shell中:

$ bundle config local.appy_core /path/to/engines/core

现在在本地分支中执行任何操作,在本地提交并享受。

可行的黑客

由于Gemfile是纯红宝石,因此可以在那里使用ruby功能:

永久shell设置中的某个地方:

alias bundle="USE_DEV_VERSION=1 bundle"
Gemfile中的

if ENV['USE_DEV_VERSION']
  gem "appy_core", path: "../engines/core"
else
  gem "appy_core", '1.7.4.5'
end

现在bundle install将在本地使用开发版本,并在“修补”环境之外使用标准gem。

答案 1 :(得分:0)

由于Gemfile作为Ruby代码执行,您可以直接引用Bundler.settings以明确排除组内的重复宝石:

def without?(group)
  Bundler.settings.without.include?(group)
end

group :development do
  gem "appy_core", path: "../engines/core" unless without? :development
end

group :production do
  gem "appy_core", '1.7.4.5' unless without? :production
end