我正在为我的应用程序开发一组 gem。
当安装我自己的任何 gem 时,gem 程序将检查 rubugems 规范(可能是依赖项)。使用详细标志,我可以看到如下消息:
GET http://rubygems.org/latest_specs.4.8.gz
302 Found
GET http://production.s3.rubygems.org/latest_specs.4.8.gz
200 OK
GET http://rubygems.org/specs.4.8.gz
问题是我在做那些gems,我每天打包/重新安装很多次,安装过程很长。
因为我很确定所有外部 gem 依赖项都得到满足,有没有办法让 gem 不检查来自 rubygems.org 的依赖项,并避免可能减慢 http 流量?
问候,
_dl
最佳答案
如果您想阻止像 rubygems.org 这样的东西作为构建的一部分被访问,您可以使用像 GemInABox 这样的内部 gemserver 来托管您将在您的组织中使用的 gem。
然后确保将 --clear-sources 和 --source 选项都传递给 gem。
例如:
gem install bundler --clear-sources --source http://your.corporate.gemserver.here.com
这将使您能够将连接问题和网络滞后问题排除在 CI 构建之外,从而消除构建差异的另一个来源。
过去,gem 的 --source 选项被用作 gem 查找的唯一来源。从 2009 年的某个地方开始,它更改为将作为选项提供的源与为 gems 定义的默认源相结合,其中之一是 http://rubygems.org 。
遗憾的是,这意味着如果您在被隔离的机器上运行 gem,甚至无法访问 http 代理,您会发现 gem 安装失败并出现网络问题,因为它会想家并尝试查找 http://rubygems.org即使你告诉它不要看那里。
Rubygems 手册有点落后,手册中未记录 --clear-source 选项。只有查看源代码才能看到。我希望其他人可以选择并使用它来节省他们一些时间。
干杯 斯图尔特
关于ruby - 安装自制 gem 时避免 http 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3759853/