为什么我不能在.gemspec中需要一个gem?

时间:2016-02-10 06:18:37

标签: ruby rubygems gemspecs

我的.gemspec文件中不能要求第三方代码。我想要一个semver库来管理我的版本号。为什么我不能在.gemspec中要求宝石?

我有针对我的特定问题的解决方法。我感兴趣的具体原因是我无法从gemspec中获取代码。我觉得我错过了关于Rubygems如何工作的一些东西。谢谢!

lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'semver'

Gem::Specification.new do |spec|
  spec.add_dependency "semver2", "~> 3.4.2"
  spec.version       = SemVer.find.to_s[1..-1]
end

运行bundle install会导致以下错误:

$ bundle

[!] There was an error parsing `Gemfile`: There was a LoadError while loading example.gemspec: 
cannot load such file -- semver from
  /opt/pose/auto/stack-overflow/example/example.gemspec:3:in `<main>'

显然,在某些时候你不能依赖第三方宝石加入你的LOAD_PATH。我要求解释这一点。我的猜测是因为我的Gemfile引用了我的gemspec而Bundler还没有加载所有依赖项,但这是一个猜测。

1 个答案:

答案 0 :(得分:1)

.gemspec只是一个Ruby脚本,就像任何其他Ruby脚本一样。基本上唯一“特殊”的是它在某些库已经require d的环境中运行,例如rubygems/specification

require库就像在任何其他Ruby脚本中一样工作。