0
# 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を参照 してください。

4

1 に答える 1

1

Rails newコマンドの動作を観察しました。Rails newRails Composer は、Rails アプリケーション テンプレートであり、ジェネレーターに便乗しています。このRails newコマンドは単純なデフォルトの Rails アプリケーションを生成し、Rails Composer がそれを変更します。Rails newコマンドによって生成された Gemfile には、gem 'rails', '~> 5.0.0'. によって指定された「悲観的なバージョニング」に注意してください~> 5.0.0。これは、5.0.0 以上 5.1 未満の任意のバージョンを使用することを意味します (任意のパッチ バージョンを使用できます)。Rails newジェネレーターが実行されると、単純なデフォルトの Rails アプリケーションによって提供される Gemfile を使用して、Rails gem を含む gem を更新します。したがって、Rails Composer が実行される前に Rails 5.0.1 gem がインストールされます。

Rails newRails 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

要約すると、問題はnewRails ComposerではなくRailsコマンドにあります。

于 2017-01-07T09:11:38.957 に答える