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

vik*_*ram 10 rubygems ruby-on-rails ruby-on-rails-3

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

s.add_dependency "X"
Run Code Online (Sandbox Code Playgroud)

在gemspec文件中.

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

找不到宝石X**

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

jwa*_*ack 15

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

gemspec文件是关于发布gem的依赖项.您Gemfile通常通过呼叫设置当地的开发环境gemspec.

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

s.add_dependency "X"
Run Code Online (Sandbox Code Playgroud)

然后你Gemfile会看起来像这样(确保本地参考在gemspec通话后):

source "http://www.rubygems.org"
gemspec
gem "X", :path => "/Users/vikram/source/X"
Run Code Online (Sandbox Code Playgroud)

引自Yahuda Katz 关于gemspec和Bundler博客文章

如果您发现需要针对尚未发布的gem进行开发(例如,Rails通常是针对未发布的Rack,Arel或Mail gems开发的),您可以在Gemfile中添加单独的行,告诉bundler在哪里可以找到宝石.它仍将使用.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"
Run Code Online (Sandbox Code Playgroud)

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


bor*_*r1s 0

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

希望它会有所帮助。