据我所知,rails:freeze:gems
和rake gems:unpack
都将宝石放置在/vendor
。 rails:freeze:gems
将/vendor/rails
gems:unpack
置于/vendor/gems
,{{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