3

对于不支持 Gemfile 中的路径选项的莺有推荐的解决方法吗?是否存在不支持路径的根本原因(我不能只是实现它)?

4

2 回答 2

2

路径选项不可移植。Bundler 希望能够在该路径中找到代码,这有点违背了自包含战争文件的目的。

一种解决方法是在基于路径的 gem 的目录中运行“git init; git commit -a”,并将其视为基于 git 的 gem。然后 Bundler 可以检出代码的副本,而 Warbler 可以将副本存储在 war 文件中。

于 2012-04-02T12:48:05.610 回答
0

我(不幸的是)无法为此发布代码(还......),但我已经成功完成了以下操作:

  1. Hack warbler(基本上替换了整个 bundler gem 打包代码)将指定的 gem 复制:path到 into vendor/gems(正常的 gem 位置是gems/gems)。这种复制几乎与莺从:git规范中复制宝石的方式相同。

  2. Monkeypatch 捆绑器,因此当它加载Gemfile带有:path规范的 a 时,它们被重写为指向vendor/gems.

它并不漂亮,但我对这个解决方案非常满意。


我看到的另一个选择是创建一个vendor/gems目录,其中包含指向:pathGemfile 中使用的所有 gem 的符号链接。Warbler 会抱怨不支持:pathgem,但它们会通过符号链接复制到 WAR 文件中。我不喜欢这个解决方案,因为您必须维护:pathGemfile 和符号链接中的 ,但它比上述更容易实现。


此外,我同意 Nick Siger 的观点,即:path按原样支持(没有上述任何技巧)确实违背了自包含 WAR 文件的目的,但自包含 WAR 文件并不总是可取的。当然,非独立的 WAR 文件需要权衡取舍,但一个优点是体积更小、复制、解压缩等更快。当然,支持这一点需要对 JRuby-Rack 和 Warbler 进行更改。

于 2012-07-18T16:11:48.407 回答