所以,现在我已经开始工作了,我想出了一些事情并将回答我自己的问题。
为简单起见,我将把 gem 的名称称为“my_gem”和“MyGem”:
In the engine.rb
文件中,我添加了:
require 'my_gem'
require 'rails'
这修复了以下类型的错误:
my_gem/lib/my_gem/engine.rb:2: uninitialized constant MyGem::Rails (NameError)
In spec_helper.rb
,我在上面添加了:
require 'bundler/setup'
require 'my_gem'
这是为了确保 Bundler 立即初始化,而不是通过应用程序初始化。这样我就可以在此处加载 MyGem,并将其挂接到应用程序的初始化序列中。这修复了NameError
引擎模型类的例外。
这就留下了一个问题:Gemfile
使用。问题是我的应用程序有自己的 gemfile,并且 gem/engine 需要它自己的独立依赖项Gemfile
.
我找不到任何 Bundler 传递两个 APIGemfile
对此,事实上 Bundler 似乎是围绕单一权威的假设构建的Gemfile
。所以我生成一个spec_helper
。我获取应用程序的 gemfile 并附加gemspec
它指向 GemSpec 格式的 gem 依赖关系。 (关于提示gemspec
顺便说一句,何塞·瓦利姆(Jose Valim)的书中缺失了)。
我不知道是否有比在测试启动期间连接文件更好的方法。如果您知道其中之一,请回复。
有用的资源有:
-
澄清 .gemspec 和 Gemfile 的角色 http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/通过耶胡达·卡茨
- gemspec 的捆绑器文档 http://gembundler.com/rubygems.html