`

细说Ruby工程的Bundle以及如何加快bundle install

    博客分类:
  • Ruby
 
阅读更多

做过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说明

本文出自 “享受编程人生” 博客,请务必保留此出处http://huihua.blog.51cto.com/3865128/706748

分享到:
评论

相关推荐

    ruby-doc-bundle

    《Ruby Doc Bundle:深入理解Ruby文档与库管理》 Ruby Doc Bundle是一个专门为Ruby开发者准备的文档集合,它包含了Ruby语言及各种Gem库的详细文档,是开发者日常学习、查询和解决问题的重要工具。在这个压缩包中,...

    Rails本地(离线)bundle install

    使用Ruby On Rails开发时经常需要Bundle Install 但有些环境网络太慢或无法连接外网的时候就需要离线Bundle 该压缩包包括52个gem 其中有sqlite3,tzinfo-data等等

    ruby-doc-bundle.chm

    ruby-doc-bundle.chm ruby-doc-bundle.chm

    rubygems-bundler, 没有 `bundle exec... `.zip

    rubygems-bundler, 没有 `bundle exec... ` &gt; = 2.2.0通常,在 RubyGems&gt; = 2.2.0上不需要这个 gem 。 只需将 RUBYGEMS_GEMDEPS 环境变量设置为你的Gemfile或者 -的路径,以便在父目录中自动发现。但是,还不

    最新版bundler,windows下可运行

    5. **执行`bundle install`**:在项目目录中运行`bundle install`,Bundler会读取Gemfile并安装所有必要的Gem及其依赖。 6. **使用Bundler启动应用**:在开发过程中,可以使用`bundle exec`来运行项目,例如`bundle...

    MakerBot_Bundle_BETA_3.10.1.1746_x64_Install (2).exe

    makerbot print 打印机官网附带软件,可在makerbot replicator 5使用

    adt-bundle-windows-x86_64-20140624

    总结起来,adt-bundle-windows-x86_64-20140624是一个完整的Android开发环境,适合使用Windows 64位系统的开发者,它包含Eclipse IDE、ADT插件、Android SDK以及其他必要的工具,使开发者能够高效地进行Android应用...

    BundleManager1.2

    Bundle Manager是基于Asset Bundle的动态加载方案。让开发者可以在不编写任何代码的情况下,方便地创建,修改,优化Asset Bundle。 特点: - 不用编写bundle管理代码。 创建和修改bundle都不需要再做繁杂的硬编码。...

    Rails bundle命令安装mysql gem包出错的解决方法

    首先 新建一个的一个项目,在该项目上执行 bundle install 提示 代码如下: … Make sure that gem install mysql2 -v ‘0.3.16’; succeeds before bundling …. 感觉非常奇怪 最后console提示 代码如下: … /home...

    adt-bundle-windows-x86-20140624工具文件

    "adt-bundle-windows-x86-20140624工具文件"是一个专为Windows平台上的x86架构设计的Android开发工具包。这个压缩包包含了Android开发者需要的一系列核心工具,使得用户能够在本地环境中创建、调试和发布Android应用...

    jekyll-build:在Docker容器中运行Bundle Install和Jekyll Build的操作

    GHA Jekyll构建在Docker容器中运行Bundle Install和Jekyll Build的操作目录 归因 :balance_scale: 执照 要求如果在GitHub上使用,则可以访问GitHub Actions;如果是私有使用,则可以访问Docker技术。 快速开始在您...

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

    Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ruby环境,帮你管理你开发的每个Ruby应用使用机器上哪个Ruby环境。Ruby环境不仅仅是Ruby本身,还包括依赖的第三方Ruby插件。都由RVM管理。 Rails 这个...

    Fragment与Activity使用Bundle传递数据

    在Android应用开发中,Fragment和Activity是两个非常重要的组件,它们共同构建了应用程序的用户界面。...通过理解Activity和Fragment的生命周期以及Bundle的工作原理,开发者可以更好地设计和管理应用程序的数据流。

    adt-bundle-windows-x86_64-中文包

    下面俩个版本都能正常使用: 编译器版本号:adt-bundle-windows-x86_64-20130717 编译器版本号:adt-bundle-windows-x86_64-20130917 汉化方法: 拷贝中文包中的文件到编译器同名目录下

    OpenDaylight主要类、bundle关系图

    这个控制器的核心在于它的模块化架构,由多个bundle组成,每个bundle都封装了一定的功能,通过服务接口进行交互。在"OpenDaylight主要类、bundle关系图"中,我们可以深入理解其内部工作原理。 首先,让我们关注Open...

    vim 配置文件 vimrc 较适用于php开发

    4、下面见证奇迹的时刻到了 命令行输入:BundleInstall 回车 哦了 此配置包涵一下插件: Bundle 'gmarik/vundle' " My Bundles here: " " original repos on github Bundle 'mattn/zencoding-vim' Bundle '...

    bundler-exec:使用“ bundle exec”自动运行Ruby脚本(但仅在适当的时候)

    输入bundler-exec,它将自动在通用Ruby命令的开头加上“ bundle exec”。 安装 将bundler-exec.sh复制到〜/ .bundler-exec.sh。 从〜/ .bashrc文件中获取它。 例如: $ curl -L https://github.com/gma/bund

    前端开源库-sake-bundle

    npm install --save-dev sake-bundle ``` 接下来,在项目根目录下创建一个`sakefile.rb`文件,然后你可以定义自己的任务,比如创建一个捆绑JS文件的任务: ```ruby require 'sake-bundle' task :bundle_js do ...

    bundlebuddy识别bundle重复的工具

    npm install -g bundle-buddy 或 yarn global add bundle-buddy ``` 2. **运行分析**:将你的bundle文件路径作为参数传递给bundle-buddy命令。 ``` bundle-buddy path/to/bundle.js ``` 3. **查看报告**:...

    adt-bundle-windows-x86_64-20131030(64位, 多SDK版)

    Android 集成开发环境 adt-bundle-windows-x86_64-20131030(64位, 多SDK版) 自带Eclipse, Android SDK(2.2到4.4的SDK都有),自己下载后重新打的包

Global site tag (gtag.js) - Google Analytics