問題的來源--sidekiq 4.1.3中的提交中有如下這么一個(gè)commit
sidekiq依賴于sinatra,在這個(gè)提交中,sinatra由development_dependency提升為dependency, 導(dǎo)致升級sidekiq后,
bundle install正常,當(dāng)時(shí)啟動或者重啟sidekiq失敗,發(fā)現(xiàn)sinatra依賴1.4.x版本。
翻遍了個(gè)整個(gè)網(wǎng)絡(luò),找到如下兩篇文件
github中關(guān)于dependency的討論還是挺多的(囧,文章好長)
rubygems官方說明
首先看一下sidekiq的gemspec文件
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/sidekiq/version', __FILE__)
Gem::Specification.new do |gem|
gem.authors = ["Mike Perham"]
gem.email = ["mperham@gmail.com"]
gem.summary = "Simple, efficient background processing for Ruby"
gem.description = "Simple, efficient background processing for Ruby."
gem.homepage = "http://sidekiq.org"
gem.license = "LGPL-3.0"
gem.executables = ['sidekiq', 'sidekiqctl']
gem.files = `git ls-files | grep -Ev '^(myapp|examples)'`.split("\n")
gem.test_files = `git ls-files -- test/*`.split("\n")
gem.name = "sidekiq"
gem.require_paths = ["lib"]
gem.version = Sidekiq::VERSION
gem.add_dependency 'redis', '~> 3.2', '>= 3.2.1'
gem.add_dependency 'connection_pool', '~> 2.2', '>= 2.2.0'
gem.add_dependency 'concurrent-ruby', '~> 1.0'
gem.add_dependency 'rack-protection', '>= 1.5.0'
gem.add_development_dependency 'redis-namespace', '~> 1.5', '>= 1.5.2'
gem.add_development_dependency 'minitest', '~> 5.7', '>= 5.7.0'
gem.add_development_dependency 'rake', '~> 10.0'
gem.add_development_dependency 'rails', '>= 3.2.0'
end
該gemspec中指定了runtime dependency和development dependency。
runtime dependency有redis, connection_pool, concurrent-ruby, rack-protection這些都是sidekiq運(yùn)行時(shí)所必需的
development dependency有redis-namepace, minitest, rake, rake, rails是sidekiq build(啟動)以及test所需要的
那么gem install安裝的時(shí)候如何安裝所有的依賴呢?
可用過
gem install --dev sidekiq或者gem install --development-all sidekiq, 前者會安裝development dependency, 后者會安裝包括依賴的依賴。development dependency默認(rèn)不會被安裝,并且當(dāng)gem被require的時(shí)候,它們不會被激活(加載)