为什么没有rails将某些宝石锁定到特定版本?

Und*_*ion 9 ruby gem ruby-on-rails bundler ruby-on-rails-4

当我生成一个新的Rails 4项目时,Gemfile看起来像这样:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.2'

# Use postgresql as the database for Active Record
gem 'pg'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end
Run Code Online (Sandbox Code Playgroud)

为什么没有Rails锁定版本pg,jquery-railsturbolinks

dax*_*dax 4

我认为来自 github 问题的关于rails_app_composer 的评论可能是其背后推理的一部分:

如果 gemfile 使用绝对版本约束(等于运算符),任何克隆或生成示例应用程序的人都可以确定该应用程序始终会按构建方式运行。但我们不会那么快地了解问题。通过乐观版本约束,我们可以在不兼容的 gem 版本发布后很快了解到 gem 的问题。

例如,最近 Devise 2.2.0 版本更改了默认密码长度。所有示例应用程序都崩溃了,因为数据库初始化文件和测试中的示例密码太短。在 Devise 2.2.0 发布后的一天(或两天)内,我意识到了这个问题,因为有几个 GitHub 问题被打开。

现在考虑一下我是否将 gemfile 锁定到具有绝对版本约束的 Devise 2.1.0 或具有悲观版本约束的 Devise 2.1.x。最终我会收到错误报告,但只有当有人感到好奇并决定尝试较新版本的 Devise 时。错误报告会到达,但速度很慢,而且不是蜂拥而至。当我看到一个孤立的错误报告时,很难知道这是某人的特殊问题还是应用程序故障。当我看到一大堆相关问题时,很容易猜测出问题所在。

这很有意义,尤其是在Turbolinks它是一项新功能的情况下。然而,作者接着说,最终他“从 Gemfile 中删除了版本号”,所以你可以随意理解。