让Bundler从加载了:path的gem / s中的Gemfile / s解析并加载依赖关系

时间:2012-09-16 13:40:26

标签: ruby-on-rails ruby gem bundler rails-engines

这是我目前的情况:

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

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

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

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

这个设置的问题似乎是Bundler在awesome_engine /中没有查找Gemfile,当它为主机rails应用程序创建应用程序包时,它只读取来自gemspec“awesome_engine”的依赖项,这对于任何你想要以“未打包”状态加载的单个宝石,当你想同时处理相关宝石的图形时,这个宝石并不是那么好

我是

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

b)遗漏了一些关于如何让Bundler这样做的微不足道的事情

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

谢谢! 安德拉斯

ps:我知道Bundler不会解析“awesome_engine / Gemfile”,因为a)如果我把垃圾放入其中主机应用程序中的bundle install仍然可以运行良好b)该文件中没有其他依赖关系最终在主机应用程序中应用包

1 个答案:

答案 0 :(得分:1)

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

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

我希望能解决你的问题。