Gem 有人自建 rubygems 服务器吗?

fire9 · 2011年11月27日 · 最后由 MaskRay 回复于 2012年11月23日 · 5603 次阅读

由于内网环境不方便上网,所以想内建一台 gem server,大家有何高见?

@huacnlee 有一篇 blog 专门讲这个问题,如果你要解决自己的问题,可以参考 http://huacnlee.com/blog/using-nginx-proxy-to-mirror-rubygem-org

如果你要作一个 rubygems 镜像,这个事情 @zhuangbiaowei 目前正在制作中,因为刚刚开始,还需要内侧还需要时日,今天他跟我说,光同步,就要同步接近 12 万个 gems 呢。

匿名 #2 2011年11月27日

#1 楼 @lgn21st 12 万个!!!!!!!!!!!!!! 有怎么多

對...我們本來也有想要作需要 fetch rubygems.org 訊息這樣的站,結果 發現有十幾萬個 gem ...

不是 12 万,而是。。15 万 8 千多。。。

58.215.172.173 rubygems.org
58.215.172.173 production.cf.rubygems.org
58.215.172.173 production.s3.rubygems.org

现在可以试着将 HOSTS 改成这个,先用用看,有问题就回复在这个帖子里。

另外,我还在调试,可能有各种问题,请小范围试用,不要传播,多谢!

我现在的做法是用 bundle package 把 gem 都打包,然后通过 bundle update --local 来安装

我现在用 proxychains

#4 楼 @zhuangbiaowei 好多好多轮子,基本不用重复制造了

proxychains 会比较方便,我将来可能也会为大家提供 rubygems 的镜像服务

@zhuangbiaowei rubygems.org 镜像搭好了,实时同步是个难题 不然大伙不一定会用!

现在的原理是这样的,正好可以跟大家探讨一下:

一段简单的 sinatra 代码,本地如果有的,就先取本地的,如果没有,就远程下载,然后再发出去。

public_path="/opt/gems-mirror/gem.mirror/gems/"

get '/*'do
  filename=request.path_info.split("/")[-1]
  unless File.exist?(public_path+filename)
    `wget #{request.url}`
    `mv #{filename} #{public_path}#{filename}`
  end
  send_file public_path+filename
end

那还不如 Nginx 反向代理并做 cache

#12 楼 @huacnlee 这个...我感觉你那个文章里的 Nginx 配置,好长的,就没有看下去,想想自己写代码,也就是几行的事情。

@huacnlee 如果 nginx 反向代理 就失去镜像的意义了 @zhuangbiaowei 这种方案可行,可能第一个人会慢点,另外可以顺便做成 不仅仅是 镜像 还可以做成 gem server,让人 push gem 上去

#14 楼 @wxianfeng 我是说 @zhuangbiaowei 这种方案还不如用反向代理。反向代理作了 cache 以后也很快的。 好的做法是应该有一个独立的域名,打开有个类似 rubygems.org 的网站,以后用的时候只用修改 Gemfile 把 rubgems.org 改为新的域名

@huacnlee 使用反向代理加 Cache 是个不错的方案。 如果我有这样一个需求,公司需要一个私有的 rubygem 用来发布自己的内部 gem 包,每次 bundle 时会先查找该 rubygems,如果未找到然后去 rubygems.org 上下载。

所以该私有 rubygems 要提供发布功能,有什么好的建议吗?

说白了就是 Java 上的 meavn,能和持续集成关联起来的?

#16 楼 @lanvige geminabox 可以实现的

我的解决方法是在服务器上装个 OpenVPN 翻墙 = =!!!

15 万个共多少空间?

镜像和 cache 都是好东西啊! 更新 ruby-china 本地代码时我都要先手工将 taobao 改为官方的,因为在墙外还是官方的快很多。

#6 楼 @zfben 这是怎么做的,我最近也看到有人这样做~~可不明白到底怎么做

可以參考清華大學 rubygems 源:http://mirrors.tuna.tsinghua.edu.cn/rubygems/

需要 登录 后方可回复, 如果你还没有账号请 注册新账号