Jan*_*Jan 5 ruby rubygems bundler
所以我有这个宝石,它取决于许多其他宝石.虽然在gemspec中它说
s.add_dependency "haml" ...
Run Code Online (Sandbox Code Playgroud)
bundler似乎并不关心,所以我必须在Gemfile中重复这些依赖.是否有需要多个宝石的语法?这样的事情(不起作用):
gem "so-and-so",
:git => "some-repo",
:require => ["this-gem", "that-gem", "and-what-not"]
Run Code Online (Sandbox Code Playgroud)
require似乎只允许单个对象
根据该Gemfile文件,你可以简单地传递需要的数组.我在研究RSpec类似语法糖时遇到了这个问题Minitest并注意到我需要:
require 'minitest/spec'
require 'minitest/autorun'
Run Code Online (Sandbox Code Playgroud)
为了让这个工作.我以前从未尝试过多次要求,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
Run Code Online (Sandbox Code Playgroud)
所以我自己Gemfile也包括在内
group :test do
gem 'minitest', require: ['minitest/autorun', 'minitest/spec']
gem 'rack-test', require: 'rack/test'
gem 'simplecov', require: false
end
Run Code Online (Sandbox Code Playgroud)
哪个工作完美,并允许我写一个测试
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
Run Code Online (Sandbox Code Playgroud)
我觉得这比读更好assert_equals user.username, 'test',给我访问我的熟悉before :each do…和after :all do…准备和清理的方法.
我非常确定 Bundler 会依靠 gem 本身来管理它们自己的依赖项。这个想法是,您不需要像这样的语法来指定依赖项,因为 gem 在它的gemspec文件中为您完成了它。 正如捆绑器文档中所述,该require关键字用于:“如果 gem 的主文件与 gem 名称不同,请指定如何需要它。”
如果一个 gem 有s.add_dependency 'haml' ...并且它不工作,那么要么该 gem 的gempsec文件有错误,要么bundler您的版本有错误(或者太旧而无法了解依赖项或其他内容)。我会将其报告给 gem 的作者。
在弄清楚 gem 或其依赖项出了什么问题之前,您可以使用的一种解决方法是将gem 及其使用的其他所需 gem 放在一个组中,并向 Gemfile 添加一条注释,说明您这样做的原因。
您遇到了哪个宝石的问题?如果您指定一个名称,其他人可能能够验证您所经历的情况或为您提供更好的帮助。当你gem dependency gem_name在 shell 中尝试时会发生什么?