gpt4 book ai didi

ruby-on-rails - Ruby 2.7.2 使用 2.7.0 库

转载 作者:行者123 更新时间:2023-12-04 14:43:51 24 4
gpt4 key购买 nike

我使用 rbenv 安装了 Ruby 2.7.2,但是当我运行以下代码时:

require 'webrick'

WEBrick::VERSION
=> "1.6.0"
WEBrick::HTTPUtils.method(:mime_type).source_location
=> ["/Users/my_user/.rbenv/versions/2.7.2/lib/ruby/2.7.0/webrick/httputils.rb", 133]

我有 webrick 1.6 版,它有一个 security issue已在 ruby 2.7.2 中修补.

如果我们在 ruby​​ 2.7.2 中使用 docker 镜像,这也会发生在我们的开发/生产环境中,因此,我认为这不是 rbenv 问题。

我想知道的是,为什么我的 ruby​​ 解释器使用 2.7.0 版本的库?

最佳答案

lib 目录中的版本化目录,即示例中的 2.6.0 并不表示库文件所属的确切 Ruby,而是表示“库兼容版本”。

在过去,即使是小版本也有很大的不同,你会有 1.8.61.8.7 这样的目录,因为那些 Ruby 版本相当彼此不同。然而,他们的补丁版本足够兼容,以至于安装的 gem 应该在该版本范围内兼容。

在 Ruby 1.9.x 版本中,情况好坏参半。 Ruby 1.9.0 和 1.9.1 都有各自的版本目录。 Ruby 1.9.2 和 1.9.3 声称与 Ruby 1.9.1 库兼容,因此继续使用 1.9.1 目录。这在 the release announcement 中的常见问题解答中进行了解释。 Ruby 1.9.2

在 Ruby 2.x 中,该方案得到了进一步完善。除非有严格的重大更改(其中还没有),否则所有次要版本都使用其第一个点版本的库版本。因此所有 Ruby 2.1.x 版本都使用 2.1.0,所有 Ruby 2.7.x 版本都使用 2.7.0 等等。

因此,虽然您绝对不应该混合使用多个 ruby​​ 版本的标准库,但 lib 目录中的库版本号在不同的版本中保持相同。例如,这允许在更新 Ruby 版本时为某个次要版本保留已安装的 gem。

因此,您的 webrick 库的版本就是您想要的版本。在 Ruby 版本中,Ruby 团队只有 backported webrick 库的修复,而不是碰撞 while 库。

关于ruby-on-rails - Ruby 2.7.2 使用 2.7.0 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68641542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com