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

时间:2012-07-11 07:45:47

标签: ruby-on-rails ruby-on-rails-3 rubygems

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

s.add_dependency "X"

在gemspec文件中。

因为gem(X)不在rubygem或git或rubyforge上,所以bundle install命令会抛出错误:

  

无法找到宝石X **

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

2 个答案:

答案 0 :(得分:14)

我想我看到了@ 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

  

如果您发现需要针对尚未发布的gem进行开发(例如,Rails通常针对未发布的Rack,Arel或Mail gem开发),您可以在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"
  

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

答案 1 :(得分:0)

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

希望它会有所帮助。