gem中有多个gem需要在gemfile中

时间:2012-02-02 13:21:57

标签: ruby rubygems bundler

所以我有这个宝石,它取决于很多其他宝石。在gemspec中,它说

s.add_dependency "haml" ...

bundler似乎并不关心,所以我必须在Gemfile中重复这些依赖。是否有需要多个宝石的语法?这样的事情(不起作用):

gem "so-and-so",
   :git => "some-repo",
   :require => ["this-gem", "that-gem", "and-what-not"]

require似乎只允许单个对象

3 个答案:

答案 0 :(得分:5)

根据the Gemfile documentation,你可以简单地传递一系列需求。我在为RSpec研究Minitest类似语法糖时注意到了这个问题,并注意到我需要:

require 'minitest/spec'
require 'minitest/autorun'

让这个工作。我以前从未尝试过Gemfile中的多个要求,谷歌搜索引导我到这个问题,更多谷歌搜索引导我到Gemfile文档说明:

REQUIRE AS (:require)
Each gem MAY specify files that should be used when autorequiring via
Bundler.require. You may pass an array with multiple files, or false
to prevent any file from being autorequired.

gem "sqlite3-ruby", :require => "sqlite3"
gem "redis", :require => ["redis/connection/hiredis", "redis"]
gem "webmock", :require => false

所以在我自己的Gemfile中我已经包含了

group :test do
  gem 'minitest', require: ['minitest/autorun', 'minitest/spec']
  gem 'rack-test', require: 'rack/test'
  gem 'simplecov', require: false
end

哪种方法很完美,并允许我编写像

这样的测试
describe 'basic crud' do
  it 'must create a user with valid details' do
    User.transaction do
      user = User.create!(username: 'test', password: 'pass')
      user.username.must_equal 'test'
      user.destroy
    end
  end
end

我发现它比assert_equals user.username, 'test'更好,并且可以访问我熟悉的before :each do…after :all do…准备和清理方法。

答案 1 :(得分:0)

我很确定Bundler会亲眼目睹宝石管理他们自己的依赖关系。这个想法是你不需要这样的语法来指定依赖关系,因为gem在它的gemspec文件中为你做了。 As stated on the bundler docsrequire关键字用于:'如果宝石的主文件与宝石名称不同,请指定如何要求它。'

如果某个宝石有s.add_dependency 'haml' ...并且它无效,那么宝石的gempsec文件会出错,或者您的bundler版本有错误(或者太旧了了解依赖关系或某事)。我会把它报告给宝石的作者。

你可以使用一种解决方法,直到你弄清楚gem的错误或它的依赖关系是put the gem and the other required gems it uses in a group,并在Gemfile中添加注释,提到你为什么要这样做。

你有哪些宝石问题?如果您指定名称,其他人可能会验证您遇到的情况或为您提供更好的帮助。当你在shell中尝试gem dependency gem_name时会发生什么?

答案 2 :(得分:0)

您必须告诉bundler使用您的gemspec作为依赖项的来源。为此,只需将其插入Gemfile

即可
source "http://rubygems.org"

# require this gem's dependencies
gemspec

通常对于gem,这是Gemfile的唯一内容。