2010-01-27 94 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