首页 文章

如何在gemspec文件中指定依赖gem的路径?

提问于
浏览
10

我创建了一个gem(X)并且它没有发布 . 现在我正在创建另一个gem,它将添加gem X作为依赖,如下所示: -

s.add_dependency "X"

在gemspec文件中 .

由于gem(X)不在rubygem或git或rubyforge上,因此bundle install命令会抛出错误:

找不到宝石X **

我认为指定X的路径会起到作用,但是如何?

2 回答

  • 0

    我想我看到了@ bor1s在SO帖子中指出的关于git引用的内容 .

    gemspec 文件是关于发布gem的依赖项 . 您的 Gemfile 通常通过调用 gemspec 来设置您的本地开发环境 .

    在你的情况下你的 gemspec 应该有这个

    s.add_dependency "X"
    

    然后你的 Gemfile 看起来像这样(确保本地引用是在 gemspec 调用之后):

    source "http://www.rubygems.org"
    gemspec
    gem "X", :path => "/Users/vikram/source/X"
    

    引自Yahuda Katz的blog post about gemspec and Bundler

    如果您发现需要针对尚未发布的宝石进行开发(例如,Rails通常针对未发布的Rack,Arel或Mail宝石开发),您可以在Gemfile中添加单独的行,告诉捆绑器到哪里找到宝石 . 它仍将使用.gemspec中列出的依赖项来进行依赖项解析,但现在它确切地知道在gem开发期间在哪里找到依赖项 .

    source "http://www.rubygems.org"
    
    gemspec
    
    # if the .gemspec in this git repo doesn't match the version required by this
    # gem's .gemspec, bundler will print an error
    gem "rack", :git => "git://github.com/rack/rack.git"
    

    您不希望将此信息包含在.gemspec中,该内容最终将在开发中的gem发布后发布到Rubygems . 同样,这使得整个系统更具弹性,因为它不依赖于瞬态外部URL . 这些信息纯粹是用于在开发期间 Build 完整环境的东西,这需要一些精确性 .

  • 14

    我想你可以在这里找到你的问题的答案:Gem dependency

    希望它会有所帮助 .

相关问题