我创建了一个 gem(X) 并且它没有发布。现在我正在创建另一个 gem,它将 gem X 添加为这样的依赖项:-
s.add_dependency "X"
在 gemspec 文件中。
由于 gem(X) 不在 rubygem 或 git 或 rubyforge 上,所以 bundle install 命令会抛出错误:
找不到宝石 X**
我认为指定 X 的路径可以解决问题,但是如何呢?
我创建了一个 gem(X) 并且它没有发布。现在我正在创建另一个 gem,它将 gem X 添加为这样的依赖项:-
s.add_dependency "X"
在 gemspec 文件中。
由于 gem(X) 不在 rubygem 或 git 或 rubyforge 上,所以 bundle install 命令会抛出错误:
找不到宝石 X**
我认为指定 X 的路径可以解决问题,但是如何呢?
我想我看到了@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。这些信息纯粹是用于在开发过程中设置完整环境的东西,这需要一定的精度。
我想你可以在这里找到你的问题的答案: Gem dependency
希望它会有所帮助。