• Gem/Bundle/Rvm


    做过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.  
    3. gem "rspec""~> 2.7.0" 
    4. 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.  
    3. cd /path/to/your/gemfiles/ 
    4.  
    5. 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说明

  • 相关阅读:
    洛谷【P1109 学生分组】 题解
    卡特兰数
    并查集
    深度优先搜索DFS;递归
    【71】序列模型和注意力机制
    c/c++ 常用的几个安全函数
    win32 Ui 编程 收集
    vc获取特殊路径(SpecialFolder)
    std::map 自定义排序
    16-----BBS论坛
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157704.html
Copyright © 2020-2023  润新知