做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的问题,有两种办法如下:
先看下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
也是在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′
接下来,在另外一台机器上测试安装gem,结果发现安装不了,出现超时问题,郁闷了好久,最后发现是gem 版本不匹配:#客户机
$ gem -v
$ 1.7.2
#gem server: dev.freetest
$ gem -v
$ 1.3.7
版本不一定要严格相同,我的尝试是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