2

我正在创建一个 gem(我们称之为它mygem),它本质上是一个 Sinatra 服务器,旨在安装在基于 Rack 的应用程序中。

在我的 gem 的 gemspec 文件中,我有以下内容:

gem.add_dependency 'kss'

在我的 gem 的 Gemfile 中,我有以下内容

source 'https://rubygems.org'

gemspec

gem "kss", :path => "/Users/me/code/kss"

现在,当从mygem's 文件夹中运行服务器时,这完全符合预期:它不会获取 kss 依赖项,而是会在我的本地驱动器上查找并加载该版本。

当我添加mygem到 Rails 测试应用程序 Gemfile 时,问题就出现了。在我的 Rails 测试应用程序 Gemfile 中,我有以下行:

gem "mygem", :path => "/Users/me/code/mygem"

我希望在 abundle install上,Bundler 将加载mygem及其依赖项;但是对于kss依赖项,Bundler 实际上并没有加载本地依赖项,而是提取到 ruby​​gems 以查找并加载它。我假设是因为在这种情况下,它只是从 gemspec 行中读取,而不包括我的依赖项覆盖。

我能做些什么来解决这种行为吗?我非常希望能够在本地运行和测试这些东西,但是 Bundler 似乎无法识别来自更高级别应用程序的依赖项覆盖。

如果我以错误的方式处理此问题,我完全愿意接受任何建议或更改。

4

1 回答 1

1

gemspec 中列出的依赖项将成为实现应用程序的依赖项,而 Gemfile 中定义的依赖项不会成为实现应用程序的依赖项。我认为您应该能够简单地将 Rails 测试应用程序 Gemfile 调整为:

gem "kss", :path => "/Users/me/code/kss"
gem "mygem", :path => "/Users/me/code/mygem"
于 2013-04-05T04:38:09.013 回答