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

fif*_*uri 7 ruby rubygems ruby-on-rails

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

ber*_*man 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