Почему Rails Composer обновляет Rails при сборке приложения?
# I run these commands:
$ rvm current
ruby-2.3.3@rails500
$ gem list | grep '^rails '
rails (5.0.1, 5.0.0)
$ gem uninstall rails -v 5.0.1
Successfully uninstalled rails-5.0.1
$ gem uninstall railties -v 5.0.1
Successfully uninstalled railties-5.0.1
$ gem list | grep railties
railties (5.0.0)
$ rails -v
Rails 5.0.0
$ rails new . -m \
https://raw.github.com/RailsApps/rails-composer/master/composer.rb
# After I answer all the prompts, a Gemfile is created, which requires
# rails '~> 5.0.1'. After running to completion, Rails Composer leaves
# me with Rails 5.0.1:
$ rails -v
Rails 5.0.1
Я явно не просил Rails 5.0.1. Тогда почему я это понимаю? Похоже, что мешает Rails Composer. См. https://github.com/RailsApps/rails-composer/issues/261 и https://github.com/RailsApps/rails-composer/issues/260
1 ответ
Вы наблюдали поведение Rails new
команда. Rails Composer - это шаблон приложения на Rails, который позволяет Rails new
генератор. Rails new
Команда генерирует простое приложение Rails по умолчанию, а затем Rails Composer изменяет его. Gemfile, сгенерированный Rails new
команда содержит gem 'rails', '~> 5.0.0'
, Обратите внимание на "пессимистическую версию", указанную ~> 5.0.0
, Это означает использование любой версии больше 5.0.0 и меньше 5.1 (можно использовать любую версию патча). Когда Rails new
генератор запускает, он обновляет гемы, включая гем Rails, используя Gemfile, предоставляемый простым приложением Rails по умолчанию. Таким образом, гем Rails 5.0.1 устанавливается до запуска Rails Composer.
Вы можете наблюдать это поведение, запустив Rails new
команда без шаблона приложения Rails Composer.
myapp/2.4.0@rails500 $ rvm current
ruby-2.4.0@rails500
myapp/2.4.0@rails500 $ gem list | grep '^rails '
rails (5.0.0)
myapp/2.4.0@rails500 $ rails -v
Rails 5.0.0
myapp/2.4.0@rails500 $ rails new .
.
.
.
run bundle install
.
.
.
Installing rails 5.0.1
.
.
.
myapp/2.4.0@rails500 $ rails -v
Rails 5.0.1
Таким образом, ваша проблема с Rails new
команда, а не с Rails Composer.