做过Ruby项目的人可能有过我一样的感受,rubygems.org在中国的访问太慢了,每次我们bundle install都要等老长时间,而我们通过浏览器去下载对应的gems文件时却速度刷刷的。。。 为什么会出现这样的情况呢? 明明我们在Gemfile中写的是:

  1. source "http://rubygems.org"

好了,既然bundle install很慢,那我就去下载gem文件下来到本地,然后运行:

  1. gem install /path/to/gems/***.gem

结果发现,有些gem文件安装速度很快,有些bundle安装很慢。 为啥呢? 我们又如何去避免这样的痛苦呢?

好,那下面我就先来详细说明一下ruby的bundle机制。

首先说一下Gemfile文件,Gemfile就是用来描述你当前ruby工程需要依赖的插件bundle,好比在java的插件工程,当前工程会依赖哪些其他插件,依赖的插件有版本区别。比如下面就是我的一个简单ruby工程的Gemfile文件内容:

  1. source "http://rubygems.org"
  2. gem "rspec", "~> 2.7.0"
  3. gem "rake", "~> 0.9.2.2"

第一行说明我bundle下载的服务器

第3行和第4行说明我当前工程需要依赖rspec插件和rake插件

"~> 2.7.0"表示需要对于的版本好为 >= 2.7.0 而且 <= 2.8.0

在运行调用代码之前都需要先bundle install好对于的插件bundle

但是写了Gemfile就需要安装bundler插件,这个完全可以通过下面的命令来完成

gem install /path/to/gem/bundler-version.gem

(先下载bundler gem文件到local)

好了,安装好了bundler,就可以执行bundle install了。

但是每次都执行bundle install都很慢很慢,让我无法承受。怎么办?

下载到本地然后gem install,发现如果插件有依赖的话,还是同样很慢,因为它会自动访问服务器去下载需要依赖的插件。既然我本地可以通过浏览器直接下载下来我需要的bundle,能否直接利用到本地的? 答案是可以的。

我们完全可以搭建一个本地的gem mirror服务器,而且非常简单。

首先,下载好所有的gem文件(其实就是bundle文件),注意依赖插件也必须准备好,放在本地某个目录中。 然后在这个目录中执行下面命令:

  1. gem generate_index -d /path/to/your/gemfiles/
  2. cd /path/to/your/gemfiles/
  3. gem server

然后修改你的Gemfile的source,改成如下:

source "http://0.0.0.0:8808"

然后运行bundle install,看到的结果一定是让你激动的效果~

最后,建议每个ruby工程目录中增加一个.rvmrc文件,这个文件就是用来指定你该工程使用的ruby版本,已经bundle安装目录和cache目录。.rvmrc的内容只有一句话:

  1. rvm --create use ruby-1.9.2@myprojectname

然后你每次进到工程目录种后都会看到自动切换到相应版本的ruby提示信息。

注意,第一次设置后,需要重新安装bundler以及bundle install,原因可以自己想一下。

另外,每次修改Gemfile时,都需要bundle install一下,这个时候不会安装所有的bundle,因为上次bundle install的时候会生成一个Gemfile.lock文件,告诉bundler哪些bundle已经安装了,而且依赖关系也知道了。 这次只会安装新增的bundle

链接:

1. Creating a RubyGems Mirror With HTTP Basic Authentication

2. Creating your own RubyGem mirror

3. Bundler说明

Gem/Bundle/Rvm的更多相关文章

  1. 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)

    这篇文章主要介绍了学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等),需要的朋友可以参考下     Ruby 这个就不用多说了 RVM 用于帮你安装Rub ...

  2. 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)

    转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ru ...

  3. RVM 安装&卸载

    安装: curl -L https://get.rvm.io | bash -s stable --autolibs=enabled [--ruby] [--rails] [—trace] $ cur ...

  4. 避免每次输入bundler Exec命令

    bundle在ruby的世界里是个好东西,它可以用来管理应用程序的依赖库.它能自动的下载和安装指定的gem,也可以随时更新指定的gem. rvm则是一个命令行工具,能帮助你轻松的安装,管理多个ruby ...

  5. ruby开源项目之Octopress:像黑客一样写博客(zhuan)

    ruby开源项目之Octopress:像黑客一样写博客 百度权重查询 词库网 网站监控 服务器监控 SEO监控 Swift编程语言教程 今年一直推荐的一种写作方式.markdown语法快速成文,git ...

  6. 零零碎碎搞了一天最后发现是ruby版本问题

    查来查去查不到问题,后来在stackoverflow看到: http://stackoverflow.com/questions/22352838/ruby-gem-install-json-fail ...

  7. 首探:Ruby on Rails 简单了解

    一. 安装 Ruby安装:https://ruby-china.org/wiki/rvm-guide 注:安装了RVM和Gem后 安装rails: gem install rails -v 5.1.4 ...

  8. scrapy-redis使用详解

    描述: 1.使用两台机器,一台是win10,一台是centos7,分别在两台机器上部署scrapy来进行分布式抓取一个网站 2.centos7的ip地址为192.168.1.112,用来作为redis ...

  9. Ubuntu Ruby On Rails安装和配置

    在这篇文章中ubuntu通过rvm安装ruby和rails.步借鉴了官方网站和网上信息,这里给大家分享. 1. 安装mapapis公钥: gpg --keyserver hkp://keys.gnup ...

随机推荐

  1. wpf中静态资源和动态资源的区别

    静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了. 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源.

  2. linux办公软件的使用和病毒防范

    今天看了linux办公软件的使用和病毒防范,特做此记录,将不熟悉的内容总结一下: openoffice 和liberoffice是可以跨平台的两款办公软件.odt是openoffice的扩展名.lib ...

  3. PHP+JQuery+Ajax初始化网站基本信息(附源码)--PHP

    一.思路 为了保存用户会员信息的时间长一些,不局限于session的关闭.我们需要将用户信息保存在数据库中,前台每次登录都需要进行校验,来查看用看用户会员信息是否过期,如果没有过期,取出用户会员信息存 ...

  4. Tomcat的安装与配置

    Windows安装Tomcat与启动 安装版安装 安装版长这个样子,下载到电脑上后双击开始安装 双击后出现如下页面,点击 Next> 之后是这个页面,点击 I Agree 之后出现如下页面,点击 ...

  5. sql 复习练习

          一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- ...

  6. Rabbitmq集群

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 Rabbitmq集群高 ...

  7. Linux服务器搭建相关教程链接整理

    Linux: Linux 教程 | 菜鸟教程 linux下如何添加一个用户并且让用户获得root权限 - !canfly - 博客园 Git: 在 Linux 下搭建 Git 服务器 - 黄棣-dee ...

  8. PHP Libxml 函数

    PHP Libxml 简介 Libxml 函数和常量与 SimpleXML.XSLT 以及 DOM 函数一起使用. 安装 这些函数需要 Libxml 程序包. 在 xmlsoft.org 下载 PHP ...

  9. Docker 容器格式

    最初,Docker 采用了 LXC 中的容器格式.自 1.20 版本开始,Docker 也开始支持新的 libcontainer 格式,并作为默认选项. 对更多容器格式的支持,还在进一步的发展中.

  10. “你什么意思”之基于RNN的语义槽填充(Pytorch实现)

    1. 概况 1.1 任务 口语理解(Spoken Language Understanding, SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图 ...