cod*_*ger 2 ruby plugins rubygems version
我正在构建一个加载用户提供的ruby代码的框架.它基本上是一个插件机制.我希望用户提供ruby代码,以便能够获得自己的宝石.我打算让"插件"包中包含一个包含宝石的供应商目录.
如何加载插件所需的宝石,而不会让它们与我的框架的宝石发生冲突?例如,如果我的框架使用treetop版本1.3.0,并且插件使用treetop 1.4.2我希望每个都使用他们指定的版本.
同样,有没有办法防止插件相互冲突?
我查看了gem_plugin,_why的沙盒和其他一些工具.但是我没有看到任何专门处理这种情况的库 - 我认为它之前已经完成了.
我还看了Bundler的内部,看看它如何管理gem版本.如果需要,我准备做一些非常复杂的事情.但我仍然不确定如何去做.
我对如何实现这一点也有很大的自由.所以,如果你认为我正在咆哮错误的树,请说出来.
谢谢你的建议.
侧面注意:在我写这篇文章时,我发现需要类似于Java servlet容器中的类加载器.WAR文件可以包含jar文件,Web应用程序的类加载器将优先于全局类路径上的jar.ruby中是否有任何方法可以分割ruby"classpath"(即load_path,require等)?
说实话,你不能同时加载同一个宝石的两个版本.
Bundler做了很好的(ish)工作,查看所有必需的gem并找到各种重叠依赖的解决方案,但即便如此,它也只限于一次加载一个gem版本.
这导致插件开发人员不断更新以支持在依赖宝石中进行的任何更改,以避免您描述的情况.
(不要让我从各种竞争的JSON实现开始搞砸了,当你有几个gem依赖都要求不同时,你必须经历的痛苦.)