2

这是我目前的情况:

我正在研究 Rails 引擎(“awesome_engine”)。我通过主机应用程序进行所有开发,即使用 :path 参数将此引擎指定为 Gemfile 中的依赖项的 Rails 应用程序

    gem "awesome_engine", :path => "awesome_engine"

这很好用 - 引擎 gem 文件夹相对于主机应用程序的根目录位于“awesome_engine”下。然而,“awesome_engine”引用了一个也在开发中的 gem,“awesome_core”。awesome_engine/Gemfile 因此读取:

    gem "awesome_common", :path => "../awesome_core"

这个设置的问题似乎是 Bundler 在为主机 rails 应用程序创建应用程序包时没有在 awesome_engine/ 中寻找 Gemfile,它只从“awesome_engine”的 gemspec 中读取依赖项,这对于任何单个 gem 都很好您希望在其“未打包”状态下加载,当您想同时处理相关 gem 的图表时,这不是很好

我是吗

a) 试图咬掉比我能咀嚼的更多的东西,应该在主机应用程序的 Gemfile 中转储“awesome_core”,而它正在开发中并对此感到满意(我不会:-))

b) 遗漏了一些关于如何让 Bundler 执行此操作的琐碎内容

c) 以上都不是(请注明:_ __ _ ____

谢谢!安德拉斯

ps:我知道 Bundler 不会解析“awesome_engine/Gemfile”,因为 a)如果我在其中放入垃圾包,则主机应用程序中的捆绑安装仍然可以正常运行 b)该文件中的其他依赖项都不会最终出现在主机应用程序应用程序包中

4

1 回答 1

1

因此,当您通过(当前项目的)Gemfile 指定 gem 时,假定您正在引用具有明确定义的依赖项的东西。这意味着应该有一个有效的 .gemspec 文件来命名这些依赖项。但这你已经知道了。

我对 c) 的建议是创建你的 gems,用bundle gem它来设置 gem 的方式,即它的 Gemfile 的信息是从 .gemspec 文件中提取的。看看http://gembundler.com/v1.2/bundle_gem.html并生成一个测试 gem 并阅读它的源代码,这很清楚。

我希望这能解决你的问题。

于 2012-09-17T14:05:57.407 回答