所以我有这个宝石,它取决于很多其他宝石。在gemspec中,它说
s.add_dependency "haml" ...
bundler似乎并不关心,所以我必须在Gemfile中重复这些依赖。是否有需要多个宝石的语法?这样的事情(不起作用):
gem "so-and-so",
:git => "some-repo",
:require => ["this-gem", "that-gem", "and-what-not"]
require似乎只允许单个对象
答案 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 docs,require
关键字用于:'如果宝石的主文件与宝石名称不同,请指定如何要求它。'
如果某个宝石有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
的唯一内容。