Ruby 为什么需要选择最新版本的gem?
如果我加载一个gem,比如说Ruby 为什么需要选择最新版本的gem?,ruby,activerecord,rubygems,bundler,Ruby,Activerecord,Rubygems,Bundler,如果我加载一个gem,比如说activerecord,在IRBrequire中选择最新版本的activerecord。在编程方面,是什么影响了选择最新gem版本的决策?require是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容 以下是bundler安装的我的activerecord gems: ➜ ~ ls -al /Users/robskrob/.rvm/gems/ruby-2.4.1/gems/activere activerecord-4.2.10/ acti
activerecord
,在IRBrequire
中选择最新版本的activerecord
。在编程方面,是什么影响了选择最新gem版本的决策?require
是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容
以下是bundler安装的我的activerecord gems:
➜ ~ ls -al /Users/robskrob/.rvm/gems/ruby-2.4.1/gems/activere
activerecord-4.2.10/ activerecord-5.0.0.1/ activerecord-5.1.2/ activerecord-5.1.3/ activerecord-5.1.4/ activerecord-5.1.5/ activerecord-5.1.6/ activeresource-5.0.0/
下面是一个IRB会话示例:
➜ ~ irb
2.4.1 :001 > require 'active_record'
=> true
2.4.1 :002 > Gem.loaded_specs['activerecord'].version
=> #<Gem::Version "5.1.6">
2.4.1 :003 >
➜ ~ 内部评级
2.4.1:001>要求“活动记录”
=>正确
2.4.1:002>Gem.加载的_规范['activerecord']版本
=> #
2.4.1 :003 >
如果我加载一个gem,比如说activerecord
,在IRBrequire
中选择最新版本的activerecord
实际上,它选择的是最新版本
在编程方面,是什么影响了选择最新gem版本的决策?require
是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容
这是require
s作业。更具体地说,这是的工作,而不是
这只是简单的关注点分离:IRb是一个REPL,不是一个包管理系统,它不应该知道任何关于包的信息。非常感谢您的回答。请原谅我的无知——也许这本身就是一篇SO帖子——但是为什么IRB会话使用RubyGems中猴子补丁版本中的
require
,而不使用Ruby核心库中的require
?这与IRB无关。Ruby 1.9之后的版本会在启动时自动加载RubyGems库,除非通过传递--disable RubyGems
显式禁用。RubyGems monkeypatchesKernel#需要
在gems中查找文件,除了$LOAD\u路径
。非常旧的RubyGems版本没有做到这一点,您必须首先通过调用内核#gem
来“激活”gem(将其添加到$LOAD\u路径中)。monkeypatched版本的require
将在所有已安装的gem中搜索该文件,如果找到,将为您激活gem。