【问题标题】:How does the ruby gem dependency resolution work?ruby gem 依赖解析是如何工作的?
【发布时间】:2012-11-13 20:19:52
【问题描述】:

我想知道 gem 如何处理它的依赖解析。

例如,当我想安装 gem foodcritic 时,它在 1.5.0 版本中依赖于 nokogiri。

我解压了 foodcritic-1.6.1.gem,但在任何地方都找不到字符串“1.5.0”、“rubygems.org”或任何可以保存版本信息的字符串。

那么“gem”如何知道 foodcritic 需要 nokogiri-1.5.0?

我问这个是因为我想手动更改该依赖项。谢谢

编辑:foodcritic-1.6.1 不包含 gemfile 或 gemspec 文件。你可以在http://rubygems.org/gems/foodcritic下找到它

【问题讨论】:

  • 所以我刚刚了解到'gem' 在上游查看远程 gemspec 文件。真的吗?它如何找出上游的实际位置?我在 gem 文件本身中找不到信息。

标签: ruby gem dependencies version


【解决方案1】:

它在 gemspec 中。见https://github.com/acrmp/foodcritic/blob/master/foodcritic.gemspec

...
s.add_dependency('nokogiri', '= 1.5.0')
...

edit...它在 gem 文件中...如果您提取它,您将看到 metadata.gz。其中包含 gemspec 信息...\

$ ll
total 56
-rw-r--r--@ 1 philip  staff  28160 Nov 13 12:54 foodcritic-1.6.1.gem
philip@Philips-MacBook-Pro:~/Downloads
$ file foodcritic-1.6.1.gem 
foodcritic-1.6.1.gem: POSIX tar archive
philip@Philips-MacBook-Pro:~/Downloads
$ tar xvf foodcritic-1.6.1.gem 
x data.tar.gz
x metadata.gz
philip@Philips-MacBook-Pro:~/Downloads
$ zmore metadata.gz 
------> metadata.gz <------
--- !ruby/object:Gem::Specification
name: foodcritic
version: !ruby/object:Gem::Version
  version: 1.6.1
  prerelease: 
platform: ruby
authors:
- Andrew Crump
autorequire: 
bindir: bin
cert_chain: []
date: 2012-08-30 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
  name: gherkin
  requirement: !ruby/object:Gem::Requirement
    none: false
    requirements:
    - - ~>
      - !ruby/object:Gem::Version
        version: 2.11.1
  type: :runtime
  prerelease: false
  version_requirements: !ruby/object:Gem::Requirement
    none: false
    requirements:
    - - ~>
      - !ruby/object:Gem::Version
        version: 2.11.1
- !ruby/object:Gem::Dependency
  name: gist
  requirement: !ruby/object:Gem::Requirement
    none: false
    requirements:
    - - ~>
      - !ruby/object:Gem::Version
        version: 3.1.0
  type: :runtime
  prerelease: false
  version_requirements: !ruby/object:Gem::Requirement
    none: false
    requirements:
    - - ~>
      - !ruby/object:Gem::Version
        version: 3.1.0
- !ruby/object:Gem::Dependency
  name: nokogiri
  requirement: !ruby/object:Gem::Requirement
    none: false
    requirements:
philip@Philips-MacBook-Pro:~/Downloads

【讨论】:

  • 我解决了我的问题,但我仍然很好奇它是如何工作的。 gem 文件中没有 metadata.gz。
  • 我使用“gem unpack foodcritic-1.6.1.gem”解压了 gem。我什至不知道我也可以使用 tar,结果会有所不同。谢谢你指点我!
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多