公告 gems.ruby-china.org 最近两天 Bad Gateway 502 的问题

huacnlee for Ruby China · 2016年05月11日 · 最后由 huacnlee 回复于 2016年07月04日 · 14256 次阅读

应该大家都已经遇到了,最近两三天,通过 gems.ruby-china.org 下载 gem 的时候,会偶尔出现 Bad Gateway 502 的问题。

$ gem install sass
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Bad Gateway 502 (https://gems-ruby-china.b0.upaiyun.com/quick/Marshal.4.8/sass-3.4.22.gemspec.rz)

遇到这类问题,可以重试一下一般就可以了。 问题原因我还在和 UpYun 沟通,已经个他们反馈了,还需要等待答复,这些文件(/gems, /quick 路径下的所有文件) 都是直接有 CDN 来处理的。


截至 2016-05-18 问题已经解决了,我们将 RubyGems 上面的 60 多万个文件镜像到了 UpYun 的国内存储里面。

问题已经找到,解决了!

原因:UpYun 对文件在 CDN 里面存储的时间有一个缓存设置界面,按其他云主机的习惯,我设定了:

  • /quick
  • /gems

我的期望是对这两个目录的文件长久缓存 1 年,再配合 UpYun 的镜像存储功能,让用户端的请求尽可能的命中 CDN 和 UpYun 的存储。

但经过刚才的检查发现,这个规则不对,UpYun 的缓存设置界面对目录的设置,需要用 * 通配符才可以,于是我修改成了这样:

再次测试,返回的 Cache-Control 和我设定的值一致了:


应该问题是这样的:

  • 由于缓存规则有错,UpYun 用了默认的缓存时间;
  • 默认的缓存时间未达到镜像存储的要求,所以这些文件过期以后任然会回源到国外的 RubyGems 服务器;
  • CDN 缓存时间过期后,UpYun 尝试请求回源地址,由于可能遇到网络问题,失败了,502;
  • 用户重试,或其他用户命中相同文件,回源成功了,CDN 再次缓存一段时间,然后持续这个周期;
gem install annotate -v '2.7.1'
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Bad Gateway 502 (https://gems-ruby-china.b0.upaiyun.com/gems/arel-6.0.3.gem)

北京 依然有这个问题

#3 楼 @awking 可能需要到 upyun 里面去刷新一次缓存?cc @huacnlee

11 点刚发现这个问题,huacnlee 同学就解决了,赞

仍然不断有这个问题 深圳电信 @huacnlee

对,502 可能会持续一小段时间,然后会被 CDN 缓存掉,并长久存储,遇到 502 的时候重试

上海...安装 cocoapods 问题持续存在... ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) bad response Bad Gateway 502 (https://gems-ruby-china.b0.upaiyun.com/quick/Marshal.4.8/cocoapods-0.2.0.gemspec.rz)

#10 楼 @blackHandsome

$ curl -I https://gems-ruby-china.b0.upaiyun.com/quick/Marshal.4.8/cocoapods-0.2.0.gemspec.rz
HTTP/1.1 200 OK
Server: marco/0.12.0
Date: Wed, 11 May 2016 05:07:53 GMT
Content-Type: binary/octet-stream
Content-Length: 509
Connection: keep-alive
X-Source: C/304
X-Proxy-Route: abroad, abroad
X-Amz-Replication-Status: COMPLETED
X-Served-By: cache-hkg6821-HKG
ETag: "732c80427c275cfafaa8c4e8ba397df2"
X-Amz-Request-Id: 65F2B3274AF6C632
X-Cache-Hits: 2
X-Amz-Version-Id: kHyODCRDIT14OO_.zJcJ9mjeB1HJR2rQ
Last-Modified: Tue, 02 Feb 2016 08:14:21 GMT
X-Amz-Id-2: vVzPIqXSomAXNGrLQe+mX37iB1kTxWaTxZ4CBdW44xTLW+ZtOTrehTrDWxhxPRSiYXVKC+ruLao=
Fastly-Debug-Digest: abae697b5247ae8c645198aa257a33fbf5806ef3ddfde073d5a2c6287bda5f4a
Age: 1887
Accept-Ranges: bytes
Expires: Thu, 11 May 2017 05:07:35 GMT
Cache-Control: max-age=31536000
X-Cache: MISS|MISS(S) from mix-hz-fdi-163; MISS(S)|HIT from ctn-zj-lna-088
X-Request-Id: 8931372901c8d844bb869b05ee80dfb7; ca6a1c0496b87d5f9222668519950ec1
Via: T.249100.N.2, T.101163.S.1, T.101163.S.2, S.mix-hz-fdi-165, V.mix-hz-fdi-165, T.249100.H.1, M.ctn-zj-lna-088

你这样试试呢

我先找个东西,都通把他们跑热,让 CDN 都有缓存

@huacnlee 刚刚又试了两次,还是不行 = =

赞,刚跑也报错

ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Bad Gateway 502 (https://gems-ruby-china.b0.upaiyun.com/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz)

换回 taobao 了,再换回来试看看

第一次 502,第二次就可以了,赞

#15 楼 @linyunjiang 因为现在配置正确了,文件访问成功以后,会自动转存到 UpYun 的文件存储里面持久化,未来的请求都直接从存储里面拿,无需在回源,这个需要一点时间让那些文件都被命中到。

现在我已经通过 FTP 连上镜像存储里面看到已经有 8000 多个文件存进去了,都是今天的(也就是说确实如上面的猜测,之前没存进去)。


16:17 更新:现在已经 17000 多个文件了

@huacnlee 时间点:19:16, 坐标上海,可以了 ^ ^

原来如此!

为毛我就没遇到呢?难道是我 bundle 次数太少了?

@huacnlee CDN 一般都有预热功能吧,

22 楼 已删除

@huacnlee

gem install cyaml
ERROR:  Could not find a valid gem 'cyaml' (>= 0), here is why:
          Unable to download data from https://gems.ruby-china.org/ - no such name (https://gems.ruby-china.org/specs.4.8.gz)

怎么破? gem udpate rails Updating installed gems ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems-china.oss-cn-hangzhou.aliyuncs.com/specs.4.8.gz)

我觉得问题还是没解决 503 错误仍然不稳定的出现(即使第一次下载正确第二次依然 503,显然没有动用到缓存)暂时切换到 ruby.taobao.org

#25 楼 @ibachue 现在只是同步了 35% 左右(约 20W 个 Gem 文件,一共有 60W)的 Gem 到镜像里面,所以可能会遇到没 cache 到的,等这个过程搞好,减少了对官方源的请求,稳定性就上来了。

截至今天,已经完整镜像了 60 万个 Gem 文件到 UpYun 的存储里面,这回问题解决了。

#27 楼 @huacnlee 哇,居然有 60 万个 Gem,Ruby 的库好多。

#28 楼 @xiaoronglv 60 万是 .gem 文件每个 Gem 有好多个版本

huacnlee Ruby China 的 RubyGems 镜像上线 提及了此话题。 07月04日 21:08
需要 登录 后方可回复, 如果你还没有账号请 注册新账号