lcj*_*ury 3 ruby rubygems ruby-on-rails bundler
我使用 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]
Run Code Online (Sandbox Code Playgroud)
我有 webrick 1.6 版,它有一个安全问题,已在ruby 2.7.2中修补。
如果我们使用带有 ruby 2.7.2 的 docker 映像,这也会发生在我们的 dev/prod 环境中,因此,我认为这不是 rbenv 问题。
我想知道的是,为什么我的 ruby 解释器使用 2.7.0 版本的库?
目录中的版本目录lib,即2.6.0在您的示例中,并不表示库文件所属的确切 Ruby,而是“库兼容版本”。
在过去,即使是次要版本也有很大的不同,因为这些 Ruby 版本彼此大不相同,所以您有诸如1.8.6, 或 之类的目录1.8.7。然而,他们的补丁版本足够兼容,安装的 gems 应该在该版本范围内兼容。
对于 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目录。这在Ruby 1.9.2发布公告中的常见问题解答中进行了解释
在 Ruby 2.x 中,这个方案得到了进一步完善。除非有严格的破坏性更改(其中还没有),所有次要版本都使用其第一个版本的库版本。因此2.1.0,所有 Ruby 2.1.x 版本都使用,所有 Ruby 2.7.x 版本都使用2.7.0,依此类推。
因此,虽然您绝对不应该混合多个 ruby 版本的标准库,但lib目录中的库版本号在不同的点发布中保持不变。例如,这允许在更新 Ruby 版本时为某个次要版本保留已安装的 gem。
因此,您的 webrick 库版本就是您想要的版本。在 Ruby 版本中,Ruby 团队刚刚向后移植了 webrick 库的修复程序,而不是修改 while 库。
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |