Ruby on rails 如何在gempec文件中指定从属gem的路径?

Ruby on rails 如何在gempec文件中指定从属gem的路径?,ruby-on-rails,ruby-on-rails-3,rubygems,Ruby On Rails,Ruby On Rails 3,Rubygems,我已经创建了一个gem(X),它还没有发布。现在我正在创建另一个gem,它将gemx添加为一个依赖项,如下所示:- s.add_dependency "X" 在gempec文件中 由于gem(X)不在rubygem、git或rubyforge上,bundle install命令抛出错误: 找不到宝石X** 我认为为X指定路径可以解决问题,但是如何解决呢?我认为您可以在这里找到问题的答案: 希望能有所帮助。我想我看到了@bor1s在SO帖子中关于git引用的内容 gempec文件是关于发布ge

我已经创建了一个gem(X),它还没有发布。现在我正在创建另一个gem,它将gemx添加为一个依赖项,如下所示:-

s.add_dependency "X"
在gempec文件中

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

找不到宝石X**


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

我认为您可以在这里找到问题的答案:


希望能有所帮助。

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

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

在您的情况下,您的
gempec
应该具有此功能

s.add_dependency "X"
然后,您的
Gemfile
将如下所示(确保本地引用位于
gempec
调用之后):


引用Yahuda Katz的话

如果您发现需要针对尚未发布的gem进行开发(例如,Rails通常针对未发布的Rack、Arel或Mail gem进行开发),您可以在gem文件中添加单独的行,告诉bundler在哪里可以找到gem。它仍将使用.gempec中列出的依赖项进行依赖项解析,但它现在知道在gem开发过程中在何处找到依赖项

您不希望将此信息包含在.gempec中,它最终将在开发中的gem发布后发布到Rubygems。同样,这使得整个系统更具弹性,因为它不依赖于临时外部URL。这些信息纯粹是用于在开发过程中设置完整环境的信息,这需要一定的精度


这个答案很有帮助。非常感谢。在我的情况下,我有gem(Y),它依赖于gem(X),但是,我想更进一步,将gem Y的本地开发版本也放到我的Rails应用程序中。我按照建议进行了设置,并且能够毫无问题地捆绑gem(Y)。然而,仅仅向Rails文件中添加gem'y',path:“path_to_y”是不够的。捆绑Rails应用程序将失败,因为捆绑程序无法找到gem(x)。我还必须包括gem'x',path:“path_to_x”,即使它不是一个直接依赖项,这是正确的。任何本地依赖项都需要在
Bundler
读取的
Gemfile
中指定,在这种情况下,您的Rails应用程序
Gemfile
Bundler
不读取从属gem的
Gemfile
,它只查看引用gem中的
.gemspec
文件。我不明白这是如何工作的。绑定器在gemspec调用过程中出错,因为它找不到gem,也找不到放置github定义的部分。@PeterP。它应该加载所有定义,合并它们,然后尝试查找gem。错误是它在任何来源中都找不到gem吗?必须同意@PeterP。这个解决方案不起作用。使用这个答案的解决方案,我得到:
在任何源代码中都找不到gem'my\u required\u gem'所需的gem'my\u gem'。
source "http://www.rubygems.org"
gemspec
gem "X", :path => "/Users/vikram/source/X"
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"