Gem 有人自建 rubygems 服务器吗?

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

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

共收到 24 条回复

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

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

#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/

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