惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
O
OpenAI News
S
Schneier on Security
Latest news
Latest news
Security Latest
Security Latest
NISL@THU
NISL@THU
V
Vulnerabilities – Threatpost
酷 壳 – CoolShell
酷 壳 – CoolShell
I
Intezer
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
博客园 - Franky
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 叶小钗
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
爱范儿
爱范儿
小众软件
小众软件
腾讯CDC
T
The Exploit Database - CXSecurity.com
美团技术团队
博客园 - 司徒正美
A
Arctic Wolf
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
The Hacker News
The Hacker News
T
Tenable Blog
J
Java Code Geeks
V
V2EX
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
K
Kaspersky official blog
IT之家
IT之家
P
Palo Alto Networks Blog
L
LINUX DO - 热门话题
博客园 - 聂微东
Cloudbric
Cloudbric
PCI Perspectives
PCI Perspectives
C
Cyber Attacks, Cyber Crime and Cyber Security
量子位
Forbes - Security
Forbes - Security
V2EX - 技术
V2EX - 技术
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Cloudflare Blog

Ruby China

[Remote][美国 A 轮] Bidbus 招聘高级全栈工程师和 Agent 工程师 Ruby 全栈开发高级工程师 用 rails 做了个小网站,拯救老 Kindle。 [上海][2026 年 07 月 14 日] Ruby Tuesday: OpenCode 企业二开 & AI-DLC 由 ai 驱动的开发流程 OkkProxy——仅需 1 美元即可获得 1GB 住宅代理 +1 个静态 ISP(新用户专享) NiuProxy 动态住宅代理:每 GB0.70 美元起(1TB 最高 0.50 美元/GB,10TB 起 0.30 美元/GB) Show Ruby China: 我用 Rails 8 开发的开源技术社区网站 MZFOSS 写了一个 Ruby 框架来管理个人环境初始化脚本 怎么让 AI 写出更有 Rails 味的代码? 头部跨境团队扩招,期待优秀的你 香港办公 / 远程 | 区块链工程师(SUI 链 DEX · ve3,3) 香港办公 / 远程 | 智能合约工程师(SUI 链 DEX · ve3,3) 有没有招 Rails 开发的 A minimalist agent in ~500 lines of Ruby: ReAct loop + macOS Seatbelt sandbox + security approvals + MCP + Skills + persistent memory 日本久光製藥鎮痛消炎貼成分?40mg 強效配方舒緩痠痛揭秘 独立开发者必看:把软著申报材料的脏活交给自动化工具 咱们老家被机器人刷屏了?https://github.com/ruby-china/homeland/pulls 新书《Rails 8 现代单体架构实战》发布 [远程] Schedar - 资深区块链工程师 使用 1password environments 来管理环境变量 Ontology driven Agent:从“提示词工程(Prompt Engineering)”向“智能体软件工程(Agent Software Engineering)” Ruby on Rails / DiscoursePluginEngineerRemote rails 项目里用 kamal 部署阿里云 ssl 证书流程总结 打听一个人 https://github.com/matzbot 關於 spinel 的原理和侷限 用 Ruby 构建 AI Agent(更新第二篇:工具调用) 在 Reddit 上发了一个 Ruby Agent 开发的帖子有点火了 有没有用 rails+AI 做了审批流的功能模块或 gem,交流下经验 最新的不一定好——预防供应链攻击 [远程] Moonveil Entertainment — web3 游戏工作室招聘 AI+ 区块链 / 区块链全栈工程师 讓 ActiveRecord model 只能在特定 service class 裏被更新 早说了转语言了身体却很诚实... Rails 开发工程师--电商网站 早期程序员囤比特币,核心目的从不是投机暴富,而是看清了婚姻的本质: AI 的经济账根本算不通 坐班宁波,提供食宿,招聘运营/BD、HR Ruby 4.0.4 修复了一个性能问题 招聘客服兼职 接受小白 电商销售 Harness 工程经验分享:实现 100% 缓存命中 OpenClacky(RubyAgent)的 7 个关键决策 寻找“乡村黑客”:向着广阔的乡土出发 matz 用 claude 把 mruby 的 issues 全关了 [成都 / 远程] Python 后端工程师 - 前硅谷大厂资深工程师带队,美资 FinTech 初创投资决策平台 (15k / 月) 11 英寸 MacBook 的第二春:从零开始配置 Ruby on Rails 开发环境 OpenClacky 1.0 正式发布 —— Ruby 圈第一个通用 Agent 来了 一夜重构!我用 18000 行代码打造了完全自研的 AI TUI 终端-IFAI Cli
Ruby China Gems 镜像服务停服公告
huacnlee · 2026-07-21 · via Ruby China

今天(2026 年 7 月 21 日),Ruby China 正式停止以下镜像服务:

  • gems.ruby-china.com:RubyGems 镜像
  • cache.ruby-china.com:Ruby 源代码及安装包镜像
  • index.ruby-china.com:RubyGems 静态文件服务 (备用)

这些服务已经运行了十多年。

我们做出这个决定,主要还是因为费用以及长期赞助的问题。

为什么停止服务

Ruby China 的镜像一直是一项完全免费、面向所有人的公共服务。

这些年来,镜像能够持续运行,主要依赖阿里巴巴、腾讯云、又拍云等厂商在不同阶段提供的服务器、CDN 和网络资源,以及 Ruby China 社区自身承担的一部分费用。

Ruby China 本身没有稳定的商业收入。社区经费主要来自厂商赞助以及历届 RubyConf China 活动结束后剩余的少量资金。

最近一年,我们陆续向腾讯云账户充值了大约 6000 元。目前腾讯云部分平均每月产生四五百元费用,但这是在已经设置流量限制的情况下产生的,也并不是整套镜像服务的全部成本。

RubyGems 的大量静态文件以及 Ruby 安装包的流量,长期以来仍然由又拍云提供资源支持。如果把这一部分实际消耗的 CDN 和存储费用也计算进去,整体成本会高出很多。

这类公共镜像服务还有一个比较麻烦的问题:费用不是固定的。

镜像的费用主要根据流量计算,而公开服务的流量很难准确预测。

这些年来,我们经常会遇到一些程序持续下载大量文件、企业内部做全量镜像、基于本站再次搭建二次镜像,以及其他异常请求。有些单个 IP 每天就会产生几十 GB,甚至上百 GB 的流量。

以前我也曾经在很长一段时间里,经常检查每日流量,将消耗异常的 IP 手工封禁。但这些请求的来源和 IP 随时会发生变化,不可能完全依靠人工处理。

如果不设置限制,一次异常流量就可能在很短时间内产生上千元费用。因此,最近我们不得不为 CDN 增加单日流量封顶限制。当流量达到限制后,服务会被自动关闭。

今年社区中出现的 418、证书错误以及服务无法访问,部分也是因为触发了这套流量限制:

所以,这个问题并不只是再去找几千元赞助就能够解决。

理论上,我们仍然可以继续联系厂商,尝试申请新的赞助。但对于一个按照流量计费、费用可能随时发生较大变化的公共服务,我们很难准确判断一年究竟需要申请多少预算,也很难让赞助方长期承担一项没有明确费用边界的服务。

过去很多年里,又拍云以不计流量费用的方式支持 Ruby China,承担了这套镜像服务中很大一部分实际成本。正是因为有这种长期支持,镜像才得以持续运行十多年。

随着国内云服务市场逐渐成熟,厂商的社区合作和赞助策略也在发生变化。以前熟悉的合作渠道和联系人不断变动,重新沟通和申请赞助也变得越来越困难。

我们完全理解厂商在不同阶段需要调整自己的经营与合作策略,也非常感谢他们已经为 Ruby China 社区提供了这么多年的帮助。

综合这些因素,我们最终决定停止镜像服务。

Ruby China 镜像服务的历史

回头来看,这套服务大致经历了三个主要阶段。

第一阶段:ruby.taobao.org

RubyGems 镜像最早可以追溯到 2011 年。

2011 年 11 月,我在社区介绍了 rubygems-mirrorgeminabox,尝试寻找一种搭建 RubyGems 镜像的方式:

随后,淘宝内部提供了服务器和网络资源,ruby.taobao.org 正式上线:

当时的实现方式,是通过 rubygems-mirror 定期将 RubyGems.org 的数据同步到国内服务器,然后由国内的 Nginx 对外提供服务。

在当年的网络环境下,国内访问 RubyGems.org 非常困难。安装一个 Gem 经常需要等待很长时间,甚至会反复失败。ruby.taobao.org 的上线,解决了很多国内 Ruby 开发者安装依赖的问题。

这一阶段的服务器、网络以及相关费用,主要由淘宝和阿里巴巴提供。

但传统同步镜像的问题,不只是实时性。

同步任务需要持续、定期运行。同步过程中只要境外网络出现抖动、连接中断,或者上游的索引和文件发生异常,就可能导致同步失败、数据不完整,甚至整个镜像长时间停留在旧状态。

RubyGems 当时的镜像和索引生成机制本身也并不完善。将 .gem 文件下载到本地相对容易,但重新生成完整索引时,只要遇到一个格式不规范的旧 Gem,就可能导致整个过程失败。

同步失败后,通常还需要人工检查日志、重新执行任务、清理不完整文件,并确认索引与文件是否重新保持一致。

这套方案看起来比较直接,但实际运行起来需要持续关注。网络只要出现一次抖动,就可能需要人工介入,维护上需要投入不少时间。

同时,一个新的 Gem 版本发布以后,也必须等待下一轮同步完成才能从镜像中安装。如果同步任务刚好出现故障,新版本可能在较长时间里一直无法使用。

到了后期,随着维护人员的工作变动以及阿里内部服务器管理环境的变化,ruby.taobao.org 逐渐变得难以继续维护。

第二阶段:迁移到 Ruby China,改用实时回源

2016 年 3 月,我们宣布由 Ruby China 接手 RubyGems 镜像:

这一次,我们没有继续采用传统的定时全量同步,而是改成了一套基于 CDN 和实时回源的架构。

动态 API 和索引文件通过境外节点实时访问 RubyGems.org,可以长期缓存的 .gem 文件则进入国内 CDN 和镜像存储。

这套方案主要解决了两个问题:

  1. 不再需要持续运行全量同步任务,减少因为同步失败而产生的人工维护;
  2. 新发布的 Gem 不需要等待下一轮同步,可以立即通过镜像获取。

实际安装过程中,RubyGems 会产生很多不同类型的请求。

其中 .gem 文件是静态文件,一旦某个版本发布,内容就不会再发生变化,因此可以长期缓存到国内 CDN。

但版本索引、API 以及部分元数据文件需要保持实时,无法简单地永久缓存。这部分请求仍然需要通过境外线路访问 RubyGems.org。

因此,这套方案本质上做了两件事情:

  • 为 RubyGems 的动态 API 和索引请求提供实时代理;
  • 为可以长期缓存的 .gem 文件提供国内 CDN 加速。

最初的实时镜像通过腾讯云 CDN 和境外服务器提供服务。随后,我们逐步将 .gem 文件迁移到又拍云的 CDN 和镜像存储中。

2016 年 5 月,镜像曾经因为缓存规则以及境外回源问题出现过一段时间的 502。当时的故障说明也记录了这套架构的具体工作方式:

问题解决后,当时 RubyGems 上的 60 多万个 .gem 文件被存储到又拍云的国内存储中。已经进入存储的文件不再需要回源,可以直接从国内 CDN 下载。

同年 4 月,我们又上线了 Ruby 官方安装包镜像:

这个服务通过又拍云 CDN 对 cache.ruby-lang.org 进行实时回源,并将访问过的 Ruby 源代码和安装包长期存储在国内。

它同样不需要定时同步:

  • Ruby 官方发布新版本后可以立即获取;
  • 不需要人工运行同步任务;
  • Ruby 源代码和安装包通过国内 CDN 下载;
  • RVM、rbenv 和 ruby-build 都可以使用。

在之后的很多年里,cache.ruby-china.com 一直是国内开发者安装 Ruby 时常用的下载地址。

2018 年,由于 .org 域名无法备案,两个镜像域名从 .org 更换为 .com

  • gems.ruby-china.orggems.ruby-china.com
  • cache.ruby-china.orgcache.ruby-china.com

当年的公告:

这一次只是更换了服务域名,背后的架构没有发生变化。

第三阶段:腾讯云与又拍云的混合架构

又运行了几年以后,由于又拍云自身网络架构和境外回源线路的调整,动态请求的稳定性开始受到影响。

RubyGems 安装过程中,虽然体积较大的 .gem 文件可以从国内 CDN 获取,但 API、版本索引以及部分无法长期缓存的文件仍然需要实时回源。境外线路只要发生抖动,就可能导致一次 bundle install 失败。

为了改善这部分请求的稳定性,我们又将主要服务逐步迁移到腾讯云。

2023 年,我们对 RubyGems 镜像进行了最后一次比较大的架构调整:

最终的架构主要由以下几部分组成:

  • 动态 API 请求通过腾讯云境外 CDN 节点回源到 RubyGems.org;
  • 可以长期缓存的 .gem 文件通过 302 跳转到 index.ruby-china.com
  • 静态文件继续通过又拍云国内 CDN 下载;
  • /versions 等常用索引文件通过腾讯云的预热机制定期更新;
  • 又拍云上原有的服务继续作为备用线路;
  • 后来又增加了全球 CDN 节点,减少国内网络直连香港时可能出现的丢包问题。

这套混合架构一直运行到今天。

2023 年,我在社区的回复里也再次说明过 Ruby China 镜像的设计方式:

简单来说,最后这套 RubyGems 镜像由三个部分共同支撑:

  1. 腾讯云 CDN 负责动态 API 和索引请求;
  2. 又拍云 CDN 和存储负责大量静态文件;
  3. Ruby China 社区经费负责腾讯云动态回源部分产生的费用。

大多数时候,这套服务可以处于低维护状态,不需要频繁人工处理。但只要境外回源线路、CDN 缓存规则、SSL 证书或者账户费用出现变化,仍然需要人工介入。

2025 年 10 月,index.ruby-china.com 曾经因为又拍云境外回源异常,持续出现 503

当时经过临时调整后恢复了服务,但这也再次说明,实时回源方案仍然依赖云厂商跨境网络的稳定性。

到了 2026 年,腾讯云 CDN 又开始出现明显的异常流量。为了避免账户余额在短时间内被大量消耗,我们不得不增加单日流量封顶限制。

随着又拍云长期社区赞助政策发生变化,这套由腾讯云、又拍云和 Ruby China 社区经费共同维持的架构,也无法再按照过去的方式继续运行。

为什么今天不再那么依赖公共镜像

十多年前,国内开发者直接访问 RubyGems.org 非常困难。

当时很多 Rails 项目仍然通过 Capistrano 将源代码发布到服务器,然后直接在生产服务器上执行 bundle install。生产服务器通常不会配置代理,因此一个能够直接访问的国内 RubyGems 镜像非常重要。

今天的开发和部署方式已经发生了很大变化。

Docker、CI/CD 和容器镜像已经成为常见的发布方式。项目依赖通常会在 CI 或镜像构建阶段提前安装,并打包进最终的发布产物,而不是每次部署时都在生产服务器上重新下载。

开发者访问 GitHub、海外云平台以及其他开发基础设施的方式也比十多年前更加丰富。在一个可控的 CI 或构建环境中直接使用 RubyGems.org,通常会是更简单、直接的方案。

包括我自己在实际项目中的经验,也是尽量直接使用官方源,并在 CI 或 Docker 构建阶段提前准备好依赖。

公共镜像曾经很好地解决了那个阶段的问题,但它在今天已经不像当年那样不可替代。

如何迁移

请检查本地开发环境、生产服务器、CI 配置和 Dockerfile 中,是否还在使用 Ruby China 镜像。

RubyGems

将 RubyGems Source 改回官方源:

gem sources --remove https://gems.ruby-china.com/
gem sources --add https://rubygems.org/
gem sources --list

Bundler

如果 Gemfile 中使用了 Ruby China 镜像:

source "https://gems.ruby-china.com"

请修改为:

source "https://rubygems.org"

如果配置过 Bundler Mirror,可以移除对应配置:

bundle config unset --global mirror.https://rubygems.org

也请检查项目目录中的 .bundle/config,以及 CI 环境中是否存在相关配置。

Ruby 安装包

Ruby 源代码和安装包请改用官方地址:

使用 RVM、rbenv 或 ruby-build 的用户,也请检查是否配置过:

https://cache.ruby-china.com

并将相关配置移除或改回 Ruby 官方地址。

RVM

Ruby China 以前的安装文档曾建议通过下面的命令,将 RVM 下载 Ruby 源代码的地址切换到本站镜像:

echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > ~/.rvm/user/db

如果曾经执行过这条命令,停服后再次运行 rvm install 安装新的 Ruby 版本时,下载可能会失败。已经通过 RVM 安装好的 Ruby 不受影响;这项配置也不影响 RubyGems 或 Bundler 下载 Gem。

可以先检查是否存在该配置:

grep '^ruby_url=' ~/.rvm/user/db

如果输出指向 cache.ruby-china.com,请编辑 ~/.rvm/user/db,删除对应的 ruby_url 配置,或者改为 Ruby 官方地址:

ruby_url=https://cache.ruby-lang.org/pub/ruby

请不要直接覆盖或删除整个 ~/.rvm/user/db,因为其中可能还保存了其他 RVM 自定义配置。

rbenv 与 ruby-build

如果使用 ruby-build,也请检查 Shell 配置、CI 环境变量和 Dockerfile 中是否设置过:

RUBY_BUILD_MIRROR_URL=https://cache.ruby-china.com

请移除该环境变量,让 ruby-build 恢复使用默认下载地址。如果安装过 rbenv-china-mirror 等镜像插件,也需要将其禁用或移除。

感谢

感谢阿里巴巴、腾讯云、又拍云在不同阶段为 Ruby China 镜像服务提供的服务器、CDN、存储和资金支持。

尤其感谢又拍云,多年来一直为 Ruby China 提供大量 CDN 和存储资源,这些镜像服务能够持续运行十多年,离不开他们的长期支持。

也感谢所有使用、反馈和帮助维护过这些服务的朋友。