为什么 Rails Composer 在构建应用程序时会更新 Rails?
Why does the Rails Composer update Rails when it builds an app?
# 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
您已经观察到 Rails new
命令的行为。 Rails Composer 是一个 Rails 应用程序模板,搭载在 Rails new
生成器上。 Rails new
命令生成一个简单的默认 Rails 应用程序,然后 Rails Composer 对其进行修改。 Rails new
命令生成的Gemfile包含gem 'rails', '~> 5.0.0'
。注意 ~> 5.0.0
指定的 "pessimistic versioning"。意思是使用大于5.0.0小于5.1的任意版本(可以使用任何补丁版本)。当 Rails new
生成器运行时,它会使用简单的默认 Rails 应用程序提供的 Gemfile 更新 gem,包括 Rails gem。因此,Rails 5.0.1 gem 在 Rails Composer 运行之前安装。
您可以在没有 Rails Composer 应用程序模板的情况下通过 运行 Rails new
命令观察此行为。
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。
# 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
您已经观察到 Rails new
命令的行为。 Rails Composer 是一个 Rails 应用程序模板,搭载在 Rails new
生成器上。 Rails new
命令生成一个简单的默认 Rails 应用程序,然后 Rails Composer 对其进行修改。 Rails new
命令生成的Gemfile包含gem 'rails', '~> 5.0.0'
。注意 ~> 5.0.0
指定的 "pessimistic versioning"。意思是使用大于5.0.0小于5.1的任意版本(可以使用任何补丁版本)。当 Rails new
生成器运行时,它会使用简单的默认 Rails 应用程序提供的 Gemfile 更新 gem,包括 Rails gem。因此,Rails 5.0.1 gem 在 Rails Composer 运行之前安装。
您可以在没有 Rails Composer 应用程序模板的情况下通过 运行 Rails new
命令观察此行为。
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。