2013-05-11 62 views
47

你能告訴我,什麼之間的區別:如果指定

$Bundle update 

$Bundle install 

回答

65

bundle update and bundle install都可以安裝您在Gemfile中指定但在寶石中缺少的寶石。

bundle update做一件事升級:

  1. 如果Gemfile中指定的寶石不具有版本,它會升級到最新什麼。
  2. 如果在Gemfile中指定的寶石的版本受到~>的控制,它將在補丁版本的最後一個數字處升級到最新的

    例如,如果你有一個寶石的Gemfile

    'foo_gem', '~> 2.1.0' 
    

    bundle update將檢查的2.1.x的新版本在雲可用。假設你的當前版本是2.1.2,雲端的最新版本是2.1.5,它將安裝2.1.5。但如果2.2.6是最新的,它不會做任何事情。在我看來

    更好的做法始終添加版本關鍵的寶石一樣rails

  3. 在大多數情況下,堅持使用bundle install(或bundle,默認爲install)。只有在真的有必要時才做bundle update,並且您已經做好了充分的準備。

+0

因此,正如我很好理解: 如果我有'foo_gem','〜> 2.1.0',主要區別是: 軟件包更新 - 安裝版本2.1。*(最新)和 捆綁軟件安裝 - 安裝版本2.1 .0 – matDobek 2013-05-11 15:01:13

+3

@ shuffla90,在這種情況下,'bundle install'仍然會安裝最新的gem say 2.1.5,如果你沒有這個gem的話。但是,如果你已經在2.1.1上有了這個gem,'bundle install'什麼都不會做。 – 2013-05-11 19:31:12

+0

明白了,muchos gracias,爲你的時間:) – matDobek 2013-05-12 08:59:46

5

Bundle Update s指定的寶石(所有寶石,無),忽略Gemfile.lock中指定的以前安裝的gems。一般來說,您應該使用bundle install在機器上安裝相同的精確寶石和版本。

+0

和捆綁安裝可能會推薦做捆綁更新。例如捆綁安裝可以說,對於一個gem該捆綁包目前已經鎖定在5.11.1。嘗試運行軟件包更新blahgem',(或者只是更新軟件包)。 – barlop 2018-01-19 06:38:25