細說Ruby工程的Bundle以及如何加快bundle install

來源:互聯網
上載者:User

 做過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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.