使用所需的提供程序构建Fog gem并限制依赖性

Phi*_*hil 6 ruby fog

我正在使用优秀的Fog gem来访问Rackspace Cloud Files服务.我的挑战是,我正在努力保持访问云文件的服务轻量级,而且似乎Fog通过其灵活性具有很多依赖性和代码,我永远不需要.

有没有人试图构建一个精简的Fog副本,只是为了包含一部分提供者,因此限制了依赖关系?例如,对于Rackspace Cloud Files API,我希望能够处理所有没有net-ssh,net-scp,nokogiri gems以及Amazon,Rackspace和其他20个未使用的代码的未使用代码.用过的.我希望每当其中一个未使用的提供商注意到一个bug时,就会避免升级gem,同时保持内存占用率下降.

我很感激任何人在这方面可能有的经验,或者任何熟悉我能够并且不能扯掉Fog的人的建议.

如果我只是使用错误的宝石,那就同样好了.我会转向更专注的事情.

gee*_*mus 10

我是雾的维护者,所以我会帮助填补一些解释/空白.简短的回答是,是的,这是很多东西,但大多数情况下它不会对你造成负面影响.

首先,雾随着时间的推移有机地增长,所以它确实比预期更大.我们与之抗衡的方法之一是,我们宁愿主动避免在真正需要之前需要/加载文件.因此,虽然您必须下载许多不会用于安装雾的提供程序文件,但它们实际上不应该最终存储在内存中.这是我们可以做的最简单的事情,以保持"正常工作",同时减少内存使用(和加载时间).

发布时间表并不会过于疯狂(平均每月一次),并且往往包含大多数提供商的混合内容.所以我希望你不会有太多的流失(在紧急/安全类型修复之外可能需要缩短正常周期).

因此,希望能够为现有技术提供一些见解.我们还讨论了从长远来看开始分解的问题.我认为如果/当发生这种情况时,我们最终会得到类似fog-rackspace所有与机架空间相关的东西.然后他们可以通过fog-core或类似的方式分享内容.我们有一个粗略的轮廓,但它是一个相当大的事业没有巨大的上升,所以它不是我们真正积极开始的东西.

如果您有其他问题或疑虑,希望有所帮助,当然乐意进一步讨论.

  • @elight我的计划,粗略地说,将是雾宝石成为各种各样的元宝石.它反过来将所有其他宝石作为依赖.因此,人们可以(甚至可能默认情况下)安装所有这些设备并且它们兼容.但是,你也可以挑选.我没有走得太远,以确保它可以很好地工作,但这似乎是我所知道的最好/最平衡的解决方案. (3认同)

eli*_*ght 5

我在Rackspace上工作,其中包括我们的Ruby SDK.你正在使用正确的宝石.Fog是我们的官方Ruby API.

这可能是通过将另一个gemspec引入到仅由雾核心和Rackspace特定文件构建的项目中来完成的.虽然这将是非常规的,并使@geemus'(宝石维护者)宝石发布过程更加复杂 - 特别是其他供应商应该开始做同样的事情.从长远来看,这将有助于将雾社区从作为统一API的角色转移.