我试图在开发中包含来自我本地的宝石而不是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
会产生相同的结果。
答案 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