Bundler安装看似不需要的宝石

时间:2014-01-23 15:15:46

标签: ruby-on-rails ruby ruby-on-rails-3 gem bundle

Bundler似乎正在安装我不需要的宝石,而且它们正在引发问题。我们举两个例子:timerscelluloid

bundle install正在安装timers所需的celluloid,但我不知道为什么会安装赛璐珞。我正在使用ruby 1.8.7和rails 3.2.13。

为什么要安装celluloid?如何查找未安装(无法安装)的gem的反向依赖项?

我的Gemfile

source "https://rubygems.org"

gem "rails", "3.2.13"
gem "mysql2", "~> 0.3.13"
gem "json", "~> 1.8.0"

group :assets do
  gem "guard-rails-assets", "~> 0.1.3"
  gem "sass-rails", "~> 3.2.6"
  gem "coffee-rails", "~> 3.2.2"
  gem "uglifier", "~> 1.0.3"
end

gem "jquery-rails", "~> 3.0.4"
gem "simple_form", "~> 2.1.0"
gem "bootstrap-sass", :path => "gems/bootstrap-sass-c0e12a90ba3e"
gem "client_side_validations", "~> 3.2.6"
gem "client_side_validations-simple_form", "~> 2.1.0"
gem "therubyracer", :platform => :ruby
gem "require_relative", "~> 1.0.3"
gem "icalendar", "~> 1.4.3"
gem "whenever", "~> 0.8.4", :require => false
gem "jquery-cookie-rails", "~> 1.3.1"
gem "hominid", "~> 3.0.5"

bundle install

的输出
Fetching gem metadata from https://rubygems.org/..........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.1)
Using i18n (0.6.1)
Using multi_json (1.8.4)
Using activesupport (3.2.13)
Using builder (3.0.4)
Using activemodel (3.2.13)
Using erubis (2.7.0)
Using journey (1.0.4)
Using rack (1.4.5)
Using rack-cache (1.2)
Using rack-test (0.6.2)
Using hike (1.2.3)
Using tilt (1.4.1)
Using sprockets (2.2.2)
Using actionpack (3.2.13)
Using mime-types (1.25.1)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (3.2.13)
Using arel (3.0.3)
Using tzinfo (0.3.38)
Using activerecord (3.2.13)
Using activeresource (3.2.13)
Using sass (3.2.13)
Using bootstrap-sass (3.0.0.0) from source at gems/bootstrap-sass-c0e12a90ba3e
Using bundler (1.5.2)
Using timers (1.1.0)

Gem::InstallError: celluloid requires Ruby version >= 1.9.2.
An error occurred while installing celluloid (0.15.2), and Bundler cannot continue.
Make sure that `gem install celluloid -v '0.15.2'` succeeds before bundling.

2 个答案:

答案 0 :(得分:6)

您可以让Bundler向您显示完整的依赖关系图:

sudo apt-get install graphviz
# Or however you install graphviz on your platform; http://www.graphviz.org/
gem install ruby-graphviz
bundle viz

当前目录中的.png将包含完整的依赖关系图。

或者,您可以通过查看Gemfile.lock文件来追溯依赖关系。在GEM部分中,每个宝石出现时都会在其下方缩进,因此您可以追溯到您要求的宝石:

GEM
# ...
    listen (2.4.0)
      celluloid (>= 0.15.2)
      rb-fsevent (>= 0.9.3)
      rb-inotify (>= 0.9)
# ...
    guard (2.2.5)
      formatador (>= 0.2.4)
      listen (~> 2.1)
      lumberjack (~> 1.0)
      pry (>= 0.9.12)
      thor (>= 0.18.1)
# ...

根据您的Gemfile判断,我猜测Celluloid被包含为guard-rails-assets的传递依赖。

答案 1 :(得分:1)

您可以使用gem dependency -R celluloid查找反向依赖项。在我的系统上,这会产生:

Gem celluloid-0.15.2
  benchmark_suite (>= 0, development)
  guard-rspec (>= 0, development)
  rake (>= 0, development)
  rspec (>= 0, development)
  timers (~> 1.1.0)
  Used by
    listen-2.1.1 (celluloid (>= 0.15.2))