由于内网环境不方便上网,所以想内建一台 gem server,大家有何高见?
@huacnlee 有一篇 blog 专门讲这个问题,如果你要解决自己的问题,可以参考 http://huacnlee.com/blog/using-nginx-proxy-to-mirror-rubygem-org
如果你要作一个 rubygems 镜像,这个事情 @zhuangbiaowei 目前正在制作中,因为刚刚开始,还需要内侧还需要时日,今天他跟我说,光同步,就要同步接近 12 万个 gems 呢。
不是 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 改成这个,先用用看,有问题就回复在这个帖子里。
另外,我还在调试,可能有各种问题,请小范围试用,不要传播,多谢!
现在的原理是这样的,正好可以跟大家探讨一下:
一段简单的 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
@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,能和持续集成关联起来的?