Пакет, использующий неправильную версию Ruby

#ruby-on-rails #ruby #bundler #rbenv

#ruby-on-rails #ruby #пакет #rbenv

Вопрос:

Когда я пытаюсь запустить свой 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 — это версия системного ruby. Я использую 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/ruby@2.3/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 ruby@2.3
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/erb
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/gem
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/irb
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/rake
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/rdoc
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/ri
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/ruby
/usr/local/Cellar/ruby@2.3/2.3.8_1/include/ruby-2.3.0/ (25 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/libruby.2.3.0.dylib
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/pkgconfig/ruby-2.3.pc
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/ruby/ (1211 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/ (3 other files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/share/emacs/ (7 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/share/man/ (4 files)
/usr/local/Cellar/ruby@2.3/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/mysql@5.7/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.

Я не уверен, что еще попробовать.

Как пакет решает, какую версию Ruby использовать, и как я могу настроить его на использование rbenv или моей домашней установки Ruby?

Комментарии:

1. Возможно, в вашей командной строке кэширована старая bundle команда, попробуйте запустить hash -r .

2. К сожалению, мне удалось решить мою проблему, не указав, что на самом деле ее решило. Я оставлю этот вопрос открытым и приму ответ, если кто-то начнет получать большинство голосов up.

3. Я попробовал метод, предложенный Мэттом, и он работает! geeksforgeeks.org/hash-command-in-linux-with-examples

4. @matt пожалуйста, добавьте это в качестве ответа — у меня это сработало, и я хотел бы поддержать это.

Ответ №1:

Как насчет того, чтобы попробовать использовать ‘rvm’?

rvm install 2.4.2

Эта команда установит другую версию ruby, 2.4.2

И вы можете просто проверить версии, которые у вас есть как

rvm list .

После этого запустите версию, которую вы хотите, как показано ниже,

rvm <version> или rvm use <version>

Надеюсь, это поможет вам!

Ответ №2:

Резюме: проблема возникает из-за неправильной версии bundler. Используйте менеджер версий ruby для установки необходимой версии ruby. Затем установите правильную версию gem bundler для вашего проекта.

Подробности: В моем случае я запускаю пример rails на github, для которого требовалась более старая версия ruby и bundler, и получил описанную ошибку.

Для управления моими различными версиями ruby я использую ruby-install и chruby обе установлены с homebrew.

Я выполнил эти шаги, чтобы решить проблему на macOS Catalina версии 10.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 и bundler мне нужно установить. Системный пакет был неправильной версии (я на Mac), и первоначальное сообщение об ошибке при использовании этой версии выдало мне ошибку ниже. Только после установки необходимого gem-модуля bundler (см. Выше) была установлена правильная версия 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`
  

Ответ №3:

Я не предлагаю использовать RVM вместо RBEnv. RBEnv — одно из самых современных решений, и большинство людей придерживаются его.

Не могли бы вы, пожалуйста, попробовать запустить gem update --system , чтобы сначала обновить свой пакет.

Ответ №4:

Установите Rbenv и выполните следующие команды в каталоге вашего проекта, чтобы установить 2.3.8:

 rbenv install 2.3.8
rbenv local 2.3.8
bundle install --path=vendor/cache
  

Ответ №5:

В какой-то момент у меня был установлен rbenv, а также Ruby вручную из-за определенных проблем, которые, как я думал, я устранил. Но, похоже, я /usr/local/bin/{bundle,bundler} все еще присутствовал, что было очевидно, когда я это сделал: which bundle это показало, что его местоположение не находится под прокладками (принадлежащими rbenv), поэтому мне просто пришлось удалить их, например, rm -rf /usr/local/bin/{bundle,bundler} и все снова заработало.