Это намеренно;это специально.
Вот соответствующий исходный код из текущей rails
главной ветви:
def rails_gemfile_entry
if options.dev?
[
GemfileEntry.path("rails", Rails::Generators::RAILS_DEV_PATH)
]
elsif options.edge?
[
GemfileEntry.github("rails", "rails/rails")
]
else
[GemfileEntry.version("rails",
rails_version_specifier,
"Bundle edge Rails instead: gem 'rails', github: 'rails/rails'")]
end
end
def rails_version_specifier(gem_version = Rails.gem_version)
if gem_version.segments.size == 3 || gem_version.release.segments.size == 3
# ~> 1.2.3
# ~> 1.2.3.pre4
"~> #{gem_version}"
else
# ~> 1.2.3, >= 1.2.3.4
# ~> 1.2.3, >= 1.2.3.4.pre5
patch = gem_version.segments[0, 3].join(".")
["~> #{patch}", ">= #{gem_version}"]
end
end
В частности, обратите внимание на оператор ~>
.
Использование этого означает, что, хотя ваш Gemfile
будет указывать версию ~> 5.2.1
, фактическая версия, которую bundler
выберет для установки, это "последняя версия, >= 5.2.1
и < 5.3.0
Msgstr ".
Патч-релизы содержат небольшие изменения, такие как исправления мелких ошибок и исправлений безопасности.Крайне редко ваш код будет ломаться из-за обновления версии патча;гораздо больше вероятно, что вы останетесь уязвимыми к уязвимости безопасности, если не сможете обновить.
Поэтому rails по умолчанию устанавливает последнее исправление изуказанная версия.
Если вы действительно хотите явно вернуться к рельсам 5.2.1
, вы можете отредактировать Gemfile
, сказав:
rails '5.2.1'
, затем повторите bundle update
.