Когда я пытаюсь запустить свой сервер Rails, я получаю следующую ошибку:
$ bundle exec rails s
Your Ruby version is 2.3.7, but your Gemfile specified ~> 2.3.8
Однако я не понимаю, почему это происходит, поскольку я установил для Ruby значение 2.3.8 как с помощью Homebrew, так и с помощью rbenv. 2.3.7 - это версия рубина системы. Я использую Mac OS 10.14.4.
$ ruby -v
ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-darwin18]
$ rbenv version
2.3.8 (set by /Users/ceasar/foo/.ruby-version)
$ which -a ruby
/Users/ceasar/.rbenv/shims/ruby
/usr/local/opt/[email protected]/bin/ruby
/usr/local/bin/ruby
/usr/bin/ruby
$ which -a bundle
/Users/ceasar/.rbenv/shims/bundle
/usr/local/bin/bundle
$ /usr/bin/xcodebuild -version
Xcode 10.2
Build version 10E125
$ brew list [email protected]
/usr/local/Cellar/[email protected]/2.3.8_1/bin/erb
/usr/local/Cellar/[email protected]/2.3.8_1/bin/gem
/usr/local/Cellar/[email protected]/2.3.8_1/bin/irb
/usr/local/Cellar/[email protected]/2.3.8_1/bin/rake
/usr/local/Cellar/[email protected]/2.3.8_1/bin/rdoc
/usr/local/Cellar/[email protected]/2.3.8_1/bin/ri
/usr/local/Cellar/[email protected]/2.3.8_1/bin/ruby
/usr/local/Cellar/[email protected]/2.3.8_1/include/ruby-2.3.0/ (25 files)
/usr/local/Cellar/[email protected]/2.3.8_1/lib/libruby.2.3.0.dylib
/usr/local/Cellar/[email protected]/2.3.8_1/lib/pkgconfig/ruby-2.3.pc
/usr/local/Cellar/[email protected]/2.3.8_1/lib/ruby/ (1211 files)
/usr/local/Cellar/[email protected]/2.3.8_1/lib/ (3 other files)
/usr/local/Cellar/[email protected]/2.3.8_1/share/emacs/ (7 files)
/usr/local/Cellar/[email protected]/2.3.8_1/share/man/ (4 files)
/usr/local/Cellar/[email protected]/2.3.8_1/share/ri/ (13487 files
$ bundle env | head -n 40
## Environment
```
Bundler 2.0.1
Platforms ruby, x86_64-darwin-18
Ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-darwin18]
Full Path /Users/ceasar/.rbenv/versions/2.3.8/bin/ruby
Config Dir /Users/ceasar/.rbenv/versions/2.3.8/etc
RubyGems 2.5.2.3
Gem Home /Users/ceasar/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0
Gem Path /Users/ceasar/.gem/ruby/2.3.0:/Users/ceasar/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0
User Path /Users/ceasar/.gem/ruby/2.3.0
Bin Dir /Users/ceasar/.rbenv/versions/2.3.8/bin
Tools
Git 2.19.2
RVM not installed
rbenv rbenv 1.1.2
chruby not installed
```
## Bundler Build Metadata
```
Built At 2019-01-04
Git SHA d7ad2192f
Released Version true
```
## Bundler settings
```
build.libv8
Set for the current user (/Users/ceasar/.bundle/config): "--with-system-v8"
build.mysql2
Set for the current user (/Users/ceasar/.bundle/config): "--with-mysql-config=/usr/local/Cellar/[email protected]/5.7.24/bin/mysql_config"
path
Set for your local app (/Users/ceasar/Desktop/beacon/.bundle/config): "vendor/bundle"
disable_shared_gems
Set for your local app (/Users/ceasar/Desktop/beacon/.bundle/config): true
```
Я не вижу здесь ничего, что заставило бы меня думать, что нужно использовать 2.3.7.
Я не уверен, что еще попробовать.
Как Bundler решает, какую версию Ruby использовать, и как я могу настроить его для использования либо rbenv, либо моей доморощенной установки Ruby?
🤔 А знаете ли вы, что...
Rails включает в себя множество встроенных инструментов для аутентификации и авторизации пользователей.
Как насчет того, чтобы попробовать использовать «rvm»?
rvm install 2.4.2
Эта команда установит другую версию ruby, 2.4.2.
И вы можете просто проверить версии, которые у вас есть, как
rvm list
.
После этого запустите версию, которую вы хотите, как показано ниже,
rvm <version>
или rvm use <version>
Надеюсь, что это поможет вам!
Я не предлагаю использовать RVM вместо RBEnv. RBEnv — одно из самых современных решений, и большинство людей придерживаются его.
Не могли бы вы сначала запустить gem update --system
, чтобы обновить сборщик.
Установите Rbenv и выполните следующие команды в каталоге вашего проекта, чтобы установить 2.3.8:
rbenv install 2.3.8
rbenv local 2.3.8
bundle install --path=vendor/cache
Резюме: Проблема связана с неправильной версией сборщика. Используйте менеджер версий ruby, чтобы установить нужную версию ruby. Затем установите правильную версию gem-пакета для вашего проекта.
Подробности: В моем случае я запускаю пример rails на github, который требует более старой версии ruby и упаковщика и получил описанную ошибку.
Для управления разными версиями ruby я использую ruby-install
и chruby
, которые установлены вместе с доморощенный.
Я выполнил следующие шаги, чтобы решить проблему в macOS Catalina v10.15.7:
% ruby-install 2.4.1
# open a new shell so chruby will find 2.4.1
% chruby 2.4.1
% which ruby
/Users/richardlogwood/.rubies/ruby-2.4.1/bin/ruby
% gem install bundler:1.16.1
% which bundle
/Users/richardlogwood/.gem/ruby/2.4.1/bin/bundle
% cd (to the rails project directory)
# Note: it's a rails project so there was a binstub
# for bundler, hence `bin/bundler` in the project directory*
% bin/bundler install
% rake db:{create,migrate}
% bin/rails s
Перед выполнением вышеуказанных шагов сообщения об ошибках сообщали мне, какую версию ruby и сборщика мне нужно установить. У системного упаковщика была неправильная версия (у меня Mac), и первоначальное сообщение об ошибке с использованием этой версии дало мне следующую ошибку. Только после установки необходимого гема комплекта (см. выше) была разрешена правильная версия ruby (см. выше).
% bundle install
Your Ruby version is 2.6.3, but your Gemfile specified 2.4.1
% which ruby
/Users/richardlogwood/.rubies/ruby-2.4.1/bin/ruby
% which bundle
/usr/bin/bundle
Обратите внимание, что требуемая версия сборщика была указана в этом сообщении об ошибке:
Could not find 'bundler' (1.16.1) required by your ... /Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.1`