ruby - 安装自制 gem 时避免 http 检查

标签 ruby rubygems

我正在为我的应用程序开发一组 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 不检查来自 ruby​​gems.org 的依赖项,并避免可能减慢 http 流量?

问候,

_dl

最佳答案

如果您想阻止像 ruby​​gems.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/

相关文章:

ruby-on-rails - 将一组动态插值参数传递给 rails-i18n?

ruby-on-rails - 回滚所有 rails 迁移或删除表并修改迁移(从头开始)

ruby-on-rails - bundler 和隐藏的 gem

ruby - 如何组合多个 Gemfile 中的 gem 来运行一个 Ruby 程序?

ruby - Sinatra 和 bundler

ruby - Ruby 1.9.1 中的 native 线程,对我有什么好处?

javascript - 实现取消按钮(将订单 ID 发送到 Controller 并将订单状态属性更新为 "cancelled")的最佳方法是什么?

无法将 C 程序转换为 Ruby

ruby-on-rails - 由于更新到 business_time gem 版本 0.9.2 日期计算错误

从 Jenkins 运行时,Ruby 无法正确理解安装了哪些 gem?