搭建rubygem repository server

做rails开发通常需要gem install xxx/bundle install安装依赖的gems,我们通常访问这两个gem server:

http://rubygems.org – ruby官方的gem server
http://gems.github.com – github上托管的gem,包含很多第三方的gem,通常比rubygems.org上的还要多。

最近国外网络访问老是不正常,安装gem包相当痛苦。昨晚尝试搭建搭建自己的gem server,解决团队成员安装gem的问题,有两种办法如下:

1. 最简单的:gem server

先看下gem server的帮助:
$ gem server -h
$ ... Documentation and gem repository HTTP server ...

帮助文档很清楚的告诉我们,gem server启动后可以访问帮助文档,同时也提供gem repository服务;

我在开发机dev.freetest上做了尝试,默认在8808端口启动,结果成功了。
现在可以在浏览器中访问http://dev.freetest:8808 gem文档,也可以安装gem。
$ gem server --daemon
$ gem install rails --source http://dev.freetest:8808

(为什么要使用开发机做gem server? 很明显开发机的gem有可能比生产环境的要丰富,适合用作开发的gem repository;)

如果发现开发机新安装了gem,请重启gem server

2. 使用nginx搭建 gem server

也是在dev.freetest上做尝试:

首先创建gem-repo
$ mkdir /home/rails/gem-repo
$ mkdir /home/rails/gem-repo/gems
$ cp /opt/ruby-enterprise/lib/ruby/gems/1.8/cache/*.gem /home/rails/gems-repo/gems
$ gem install builder

# 创建gem index,如果新安装了gem,则重新执行下面的命令
$ gem generate_index -d /home/rails/gems-repo/

马上,你会看到如下的信息:
Loading 1 gems from /var/www/gems-repo
.
Loaded all gems
Generating quick index gemspecs for 1 gems
.
Complete
Generating specs index
Generating latest specs index
Generating quick index
Generating latest index
Generating Marshal master index
Generating YAML master index for 1 gems (this may take a while)
.
Complete
Compressing indicies

然后添加到nginx
$sudo vi /opt/nginx/conf/nginx.conf ;

# 添加到nginx配置中
server {
listen 81;
server_name gems.dev.freetest;
root /home/rails/gems-repo;
}

$ sudo /opt/nginx/sbin/nginx -s reload ;#重启nginx

然后你就可以从http://gems.dev.freetest:81 上面安装gem了

如果使用bundle install,请修改Gemfile:
source ‘dev.freetest:8808′

3 特别注意:服务器与客户机的gem版本要匹配!

接下来,在另外一台机器上测试安装gem,结果发现安装不了,出现超时问题,郁闷了好久,最后发现是gem 版本不匹配:
#客户机
$ gem -v
$ 1.7.2

#gem server: dev.freetest
$ gem -v
$ 1.3.7

安装特定版本的gem

版本不一定要严格相同,我的尝试是1.3.7 – 1.5都能匹配。
$ gem update --sytem 1.3.7

#如果使用了rvm,则:
$ rvm rubygems remove
$ rvm rubygems 1.3.7

 

from: http://qa.taobao.com/?p=12981

你可能感兴趣的:(repository)