2010-01-27 96 views
7

據我所知rails:freeze:gems和耙gems:unpack都把寶石放在/vendorrails:freeze:gems將它們放置到/vendor/railsgems:unpack將它們放置到/vendor/gems。然而,對我來說,重點似乎是一樣的。在這兩種情況下,我們的目標都是在開發過程中修復寶石及其版本。還有其他的區別嗎?在我看來,現在重複..耙路軌之間有什麼區別:凍結:寶石和耙寶石:解壓?

回答

7

從我的理解,寶石:解壓將解開任何第三方寶石您的應用程序需要到供應商/寶石。
rails:freeze:gems只會凍結那些與rails本身有關的寶石,所以它會將您的應用凍結到特定版本的rails。因此不同的/ vendor/rails目錄。

要多加評論了一下:
有這一行到config/environment.rb
# Specifies gem version of Rails to use when vendor/rails is not present RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION

所以在默認情況下,軌道將檢查如果供應商/導軌目錄存在,並且使用的版本那些寶石,如果它。如果沒有,您必須設置它將使用哪個版本的導軌,並且導軌會嘗試從本地系統中獲取這些寶石。

因此,我所看到的兩個命令之間的唯一區別是rails:freeze:gems只會將rails文件轉儲到供應商/導軌中,這正是導軌所希望的。

您想使用gem:unpack的原因是爲了轉儲應用程序依賴的第三方gems,因此無論您的應用程序在哪裏運行,都不需要在本地安裝這些gems。

你可以把rails:freeze:gems想象成一個快捷方式,它只是將rails的一個gem:unpack gems放到目錄rails(/ vendor/rails)中,這樣你就不必手動去做了。但是,是的,幕後我預計rails:freeze:gems可能使用gem:unpack

+0

謝謝!它澄清了很多事情。我玩過任務。然而,在我看來,怪胎以不同的方式處理鐵軌寶石和其他寶石。在某種程度上,第三方和鐵軌寶石都只是寶石。我認爲bundler處理這種方式沒有任何區別。 – fifigyuri 2010-01-27 22:43:43