【问题标题】:Why can't I require a gem from within the .gemspec?为什么我不能要求 .gemspec 中的宝石?
【发布时间】:2016-02-10 06:18:37
【问题描述】:

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

我有一个解决我的特定问题的方法。我对我不能从 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

[!] 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>'

显然,在某些时间点之前,您不能依赖 3rd 方 gem 位于您的 LOAD_PATH 上。我要求解释这一点在哪里。我的猜测是因为我的 Gemfile 引用了我的 gemspec,而 Bundler 尚未加载所有依赖项,但这是一个猜测。

【问题讨论】:

  • “需要代码”是什么意思?来源?因为需要 3rd 方宝石可能是 .gemspec 的主要和唯一目标。
  • 您是否混淆了声明依赖项和实际需要代码?

标签: ruby rubygems gemspecs


【解决方案1】:

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

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

【讨论】:

  • 你说得对,require 有效。我的问题已被修改,以强调在 gemspec 文件中,您不能依赖这些 gem 位于加载路径上,甚至不能安装。
猜你喜欢
  • 2013-10-28
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多