Gem/Bundle/Rvm
做过Ruby项目的人可能有过我一样的感受,rubygems.org在中国的访问太慢了,每次我们bundle install都要等老长时间,而我们通过浏览器去下载对应的gems文件时却速度刷刷的。。。 为什么会出现这样的情况呢? 明明我们在Gemfile中写的是:
- source "http://rubygems.org"
好了,既然bundle install很慢,那我就去下载gem文件下来到本地,然后运行:
- gem install /path/to/gems/***.gem
结果发现,有些gem文件安装速度很快,有些bundle安装很慢。 为啥呢? 我们又如何去避免这样的痛苦呢?
好,那下面我就先来详细说明一下ruby的bundle机制。
首先说一下Gemfile文件,Gemfile就是用来描述你当前ruby工程需要依赖的插件bundle,好比在java的插件工程,当前工程会依赖哪些其他插件,依赖的插件有版本区别。比如下面就是我的一个简单ruby工程的Gemfile文件内容:
- source "http://rubygems.org"
- gem "rspec", "~> 2.7.0"
- 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文件),注意依赖插件也必须准备好,放在本地某个目录中。 然后在这个目录中执行下面命令:
- gem generate_index -d /path/to/your/gemfiles/
- cd /path/to/your/gemfiles/
- gem server
然后修改你的Gemfile的source,改成如下:
source "http://0.0.0.0:8808"
然后运行bundle install,看到的结果一定是让你激动的效果~
最后,建议每个ruby工程目录中增加一个.rvmrc文件,这个文件就是用来指定你该工程使用的ruby版本,已经bundle安装目录和cache目录。.rvmrc的内容只有一句话:
- 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的更多相关文章
- 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)
这篇文章主要介绍了学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等),需要的朋友可以参考下 Ruby 这个就不用多说了 RVM 用于帮你安装Rub ...
- 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)
转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ru ...
- RVM 安装&卸载
安装: curl -L https://get.rvm.io | bash -s stable --autolibs=enabled [--ruby] [--rails] [—trace] $ cur ...
- 避免每次输入bundler Exec命令
bundle在ruby的世界里是个好东西,它可以用来管理应用程序的依赖库.它能自动的下载和安装指定的gem,也可以随时更新指定的gem. rvm则是一个命令行工具,能帮助你轻松的安装,管理多个ruby ...
- ruby开源项目之Octopress:像黑客一样写博客(zhuan)
ruby开源项目之Octopress:像黑客一样写博客 百度权重查询 词库网 网站监控 服务器监控 SEO监控 Swift编程语言教程 今年一直推荐的一种写作方式.markdown语法快速成文,git ...
- 零零碎碎搞了一天最后发现是ruby版本问题
查来查去查不到问题,后来在stackoverflow看到: http://stackoverflow.com/questions/22352838/ruby-gem-install-json-fail ...
- 首探:Ruby on Rails 简单了解
一. 安装 Ruby安装:https://ruby-china.org/wiki/rvm-guide 注:安装了RVM和Gem后 安装rails: gem install rails -v 5.1.4 ...
- scrapy-redis使用详解
描述: 1.使用两台机器,一台是win10,一台是centos7,分别在两台机器上部署scrapy来进行分布式抓取一个网站 2.centos7的ip地址为192.168.1.112,用来作为redis ...
- Ubuntu Ruby On Rails安装和配置
在这篇文章中ubuntu通过rvm安装ruby和rails.步借鉴了官方网站和网上信息,这里给大家分享. 1. 安装mapapis公钥: gpg --keyserver hkp://keys.gnup ...
随机推荐
- [HEOI 2016] seq
题解: 发现多决策且明显无后效性,果断dp,那么转移方程F[i]=F[j]+1 设R[I]为改变之后的最大值,L[i]为改变之后的最小值 由于只能改变一个元素 所以转移的条件是 (j<i &am ...
- [BZOJ]1093 最大半连通子图(ZJOI2007)
挺有意思的一道图论. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:∀u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v ...
- 修改Linux命令提示符
vim .bashrc export PS1='\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\h\e[m:\W\$'
- Linked List Cycle II--寻找单链表中环的起始点
题目要求 Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. ...
- Servlet生命周期与工作原理(转载)
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- SQL Server用户自定义数据类型
用户自定义数据类型:基于系统数据类型,由数据库管理员生成.利用系统存储过程定义用户自定义数据类型` Sp_addtype [@typename=] 新数据类型名, [@phystype=] 系统数据类 ...
- 重写轮子之 ID3
这是半成品, 已完成了 fit() 部分, 形成了包含一棵完整树的 node 对象. 后续工作是需解析该 node对象, 完成 predict() 工作. # !/usr/bin/python # - ...
- Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选
需要实现的功能:选中父节点对应子节点全选:不选中父节点,对应子节点也不选中 如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示. 选中cqupt ...
- 使用gogs搭建git私有仓库
搭建gogs 我的机器环境:centos 7 1.安装git yum install git 2.安装mysql gogs的数据存在mysql中,需要安装一个mysql来存数据,当然也有其他的选择 ...
- ftp传二进制文件时一定要用二进制模式,否则内容会有变化,造成后处理莫名其妙的错误,还以为传输前后内容一致,其实已变化。
ftp传二进制文件时一定要用二进制模式,否则内容会有变化,造成后处理莫名其妙的错误,还以为传输前后内容一致,其实已变化.