15

我创建了一个 gem(X) 并且它没有发布。现在我正在创建另一个 gem,它将 gem X 添加为这样的依赖项:-

s.add_dependency "X"

在 gemspec 文件中。

由于 gem(X) 不在 ruby​​gem 或 git 或 ruby​​forge 上,所以 bundle install 命令会抛出错误:

找不到宝石 X**

我认为指定 X 的路径可以解决问题,但是如何呢?

4

2 回答 2

20

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

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关于 gemspec 和 Bundler 的博客文章

如果您发现需要针对尚未发布的 gem 进行开发(例如,Rails 经常针对未发布的 Rack、Arel 或 Mail gem 进行开发),您可以在 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。这些信息纯粹是用于在开发过程中设置完整环境的东西,这需要一定的精度。

于 2014-04-08T22:50:47.550 回答
0

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

希望它会有所帮助。

于 2012-07-11T08:09:12.507 回答