rake rails之间有什么区别:freeze:gems和rake gems:unpack?

时间:2010-01-27 21:40:39

标签: ruby-on-rails ruby rubygems

据我所知,rails:freeze:gems和rake gems:unpack都将宝石放置在/vendorrails:freeze:gems/vendor/rails gems:unpack置于/vendor/gems,{{1}}将其置于{{1}}。然而,对我来说,这一点似乎是一样的。在这两种情况下,目标都是在开发过程中修复宝石及其版本。还有其他区别吗?在我看来现在重复..

1 个答案:

答案 0 :(得分:7)

根据我的理解,gem:unpack会将您的应用所需的任何第三方宝石解压缩到供应商/宝石中 rails:freeze:gems只冻结那些与rails本身有关的gem,因此它会将你的应用程序冻结到特定版本的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将检查vendor / rails目录是否存在,如果存在,则使用这些gem的版本。如果没有,您必须设置它将使用哪个版本的rails,rails将尝试从本地系统中提取gem。

因此,我看到的两个命令之间的唯一区别是rails:freeze:gems只将rails文件转储到vendor / rails,这正是rails希望它们的位置。

您要使用gem:unpack的原因是转储您的应用所依赖的第三方宝石,因此无论您的应用运行在何处,都不需要在本地安装这些宝石。

您可以将rails:freeze:gems视为一种快捷方式,只需将gem:unpack只有rails gems放入rails期望的目录(/ vendor / rails),这样您就不必手动做到这一点。但是,在幕后我预计rails:freeze:gems可能使用gem:unpack