【发布时间】:2012-07-19 00:11:48
【问题描述】:
对于不支持 Gemfile 中的路径选项的莺有推荐的解决方法吗? 路径不受支持(我不能只是实现它)有根本原因吗?
【问题讨论】:
对于不支持 Gemfile 中的路径选项的莺有推荐的解决方法吗? 路径不受支持(我不能只是实现它)有根本原因吗?
【问题讨论】:
路径选项不可移植。 Bundler 希望能够在该路径中找到代码,这有点违背了自包含战争文件的目的。
一种解决方法是在基于路径的 gem 的目录中运行“git init; git commit -a”,并将其视为基于 git 的 gem。然后 Bundler 可以检出代码副本,Warbler 可以将副本存储在 war 文件中。
【讨论】:
我(很遗憾)无法为此发布代码(还...),但我已成功完成以下操作:
Hack warbler(基本上替换整个bundler gem 打包代码)将:path 指定的gem 复制到vendor/gems(正常gem 位置是gems/gems)。这种复制几乎与莺从:git 规范中复制宝石的方式相同。
Monkeypatch 捆绑器,因此当它加载带有 :path 规范的 Gemfile 时,它们会被重写为指向 vendor/gems。
它并不漂亮,但我对这个解决方案非常满意。
我看到的另一个选项是创建一个 vendor/gems 目录,其中包含指向 Gemfile 中使用 :path 的所有 gem 的符号链接。 Warbler 会抱怨不支持:path gems,但它们会通过符号链接复制到 WAR 文件中。我不喜欢这种解决方案,因为您必须在 Gemfile 和符号链接中维护 :path,但它比上述更容易实现。
另外,我同意 Nick Siger 的观点,即按原样支持 :path(没有上述任何技巧)确实违背了自包含 WAR 文件的目的,但自包含 WAR 文件并不总是可取的。当然,非独立的 WAR 文件需要权衡取舍,但一个优点是体积更小、复制、解压缩等更快。当然,支持这一点需要对 JRuby-Rack 和 Warbler 进行更改。
【讨论】: