我有一个可以帮助版本控制的宝石。在gemspec文件中定义版本时,使此gem可用非常有用。
但是,问题在于,运行bundle install
首先会导致gemspec解析,这会导致错误,因为尚未安装所需的gem。
我可以通过在gem install <other_gem>
之前运行bundle install
来解决它,但是我更喜欢捆绑器管理它,尤其是考虑到我正在使用自定义的gem服务器时。
我尝试将gem添加到gemspec行之前的Gemfile中,但是没有运气。
宝石文件:
source 'https://my.gemserver.com/gems'
gemspec
mygem.gemspec:
require 'external/dependency'
Gem::Specification.new do |spec|
spec.name = 'mygem'
spec.version = External::Dependency.version_helper
....
spec.add_development_dependency 'external-dependency'
end
编辑: 另一个解决方法是抢救LoadError并在未加载依赖项的情况下指定默认版本。另外,也不理想
begin
require 'external/dependency'
rescue LoadError; end
Gem::Specification.new do |spec|
spec.name = 'mygem'
spec.version = defined?(External::Dependency) ? External::Dependency.version_helper : ''
....
spec.add_development_dependency 'external-dependency'
end
答案 0 :(得分:0)
我认为您坚持使用gem install
。但是我可以通过将该步骤添加到用于该项目的Dockerfile中来解决此问题。
也许可以使用rbenv或rvm做类似的事情?自从迁移到Docker以来,没有使用过任何一个,但是rvm gemset是一种引导程序...
答案 1 :(得分:0)
我通过使gemspec在捆绑更新或安装期间安装gem来解决这个问题。
newComponent.instance
然后...
EXTERNAL_DEPENDENCY = Gem::Dependency.new('external-dependency', '~> 0.1')
if File.basename($0) == 'bundle' && ARGV.include?('update') || ARGV.include?('install')
require 'rubygems/dependency_installer'
Gem::DependencyInstaller.new.install(EXTERNAL_DEPENDENCY)
end