【问题标题】:Bundler installing seemingly un-needed gemsBundler 安装看似不需要的 gem
【发布时间】:2014-01-23 15:15:46
【问题描述】:

Bundler 似乎正在安装我不需要的 gem,它们正在引起问题。举两个例子:timers和celluloid

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.

【问题讨论】:

  • 你能分享你的Gemfile.lock吗?
  • @Abdo - 下面接受的答案解决了这个问题。谢谢!

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


【解决方案1】:

您可以让 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 都显示在其下方缩进其直接依赖项,因此您可以追溯到您请求的 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 判断,我猜赛璐珞被包含为 guard-rails-assets 的传递依赖项。

【讨论】:

  • 是的,guard-rails-assets 是问题所在。评论了它,我的包安装得很好。反正我觉得我不需要那个宝石。谢谢!
【解决方案2】:

您可以使用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))

【讨论】:

  • 我无法查找未安装的 gem 的依赖项,并且由于需要 Ruby 1.9.2+,因此未安装赛璐珞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2013-02-15
  • 2014-04-02
  • 1970-01-01
相关资源
最近更新 更多