【问题标题】:gemspec dependencies definition and require conflictgemspec 依赖项定义和需要冲突
【发布时间】:2011-10-12 21:18:38
【问题描述】:

我在 gem 依赖项定义 和这些 gem 的 require 之间存在冲突。

我有这个:

# Gemfile
source "http://rubygems.org"
gemspec

-

# my_gem.gemspec
$:.push File.expand_path("../lib", __FILE__)
require "my_gem"

Gem::Specification.new do |s|
  s.version = MyGem::VERSION
  # ...
  s.add_dependency "s3"
end

-

# /lib/my_gem.rb
require 'rubygems'
require 's3'

冲突线是 s3 要求,因为当我执行 bundle install 时它会抱怨因为尚未安装此 gem。

解决方法是注释这个 require,然后执行 bundle install 并再次取消注释这个根本不漂亮的 require。

欢迎任何建议,如果您需要更多详细信息来理解问题,请告诉我。

【问题讨论】:

    标签: ruby bundler gemspecs


    【解决方案1】:

    首先,不要在 gemspec 中要求整个 gem。将您的版本信息移动到“lib/my_gem/version.rb”之类的路径并要求它。其次,除非您将 Rubygems API 用于某些功能,否则不应执行“需要 'rubygems'”。有些用户不使用 Rubygems,除非必要,否则不要强迫他们使用。

    【讨论】:

    • 作为一个魅力,谢谢.. 也感谢 不需要 ruby​​gems 提示,我一直在阅读这方面的内容,我已经更改了我的 require i> 由其他人:gist.github.com/1105149
    • 由于您的库将使用 ruby​​gems 运行,因此根本不需要 ruby​​gems。测试时,例如二进制文件,使用 ruby​​ -I lib -rubygems bin/mybinnary
    • rubygems 是 ruby​​ 1.9.3 内置的,所以从那里开始就不是问题了。
    【解决方案2】:

    1.- 在库中不需要“rubygems”。就像一个 unix 程序需要 apt-get,所以没有其他系统不能使用你的库。

    2.- 在库中,将您的版本放在单独的文件 /lib/lib_name/version.rb 中,并在 gemspec 上要求该文件。只有那个文件,所以在尝试加载 gemspec 时不会加载库和依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2021-11-05
      • 2016-11-05
      • 2019-08-08
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多