gemspec依赖关系定义并要求冲突

时间:2011-07-25 19:54:00

标签: ruby bundler gemspecs

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。

解决方法是对此需求进行评论,然后执行bundle install并再次取消注释不需要的内容。

欢迎提出任何建议,如果您需要更多细节来了解问题,请告诉我。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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