Сервер Rails использует другую версию ruby, чем указано в rbenv

#ruby-on-rails #ruby #rbenv

Вопрос:

В моем проекте rails, когда я пытаюсь запустить сервер rails, я получаю следующую ошибку:

Your Ruby version is 2.7.0, but your Gemfile specified 2.7.2

Однако, когда я бегу ruby --version , я получаю:

ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

Кроме того, как rbenv global, так и rbenv local настроены на 2.7.2

В настоящее время запуск rbenv versions возвращает

  • система
  • *2.7.2 (устанавливается /home/имя_пользователя/MyProject/my_project/.ruby-версия)

В обоих моих файлах Gemfile.lock и .ruby-версии указана версия ruby 2.7.2.

Кроме того, при запуске сервера я получаю сообщение «текущая версия пакета (2.1.2) старше версии, создавшей файл блокировки (2.1.4)», в то время как версия Bundler version 2.1.4 пакета проверяется.

Я не могу понять, почему в задаче используется совершенно другая версия ruby и bundler.

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

1. Ты пробовал bundle exec rails s ?

2. Сообщение об ошибке: the running version of Bundler.... не связано и не имеет отношения к проблеме.

3. Вероятным виновником является то , что у вас возник конфликт между установками ruby — например, вы также установили систему ruby или использовали несколько менеджеров версий, таких как rvm .

4. Я понимаю, что это не имеет отношения к @TomLord. Я пытаюсь указать, что при использовании bundle exec rails s следует избегать системного ruby и использовать тот, который указан в файле Gemfile.

5. @rdalpra Вы никогда не упоминали bundle exec об этом в своем вопросе. Вы только что сказали «при запуске сервера». И это предупреждение все равно может появиться, если вы установили только версию 2.1.2 пакета для ruby 2.7.2 . Чтобы исправить это, вам нужно gem update bundler будет это сделать, но, как я уже сказал выше, я очень сомневаюсь, что это повлияет на вашу основную проблему здесь.

Ответ №1:

Вы тоже используете свой сервер rails с пакетом? Нравится:

 $ bundle exec rails s
 

Потому что bundle будет использовать драгоценные камни из вашего файла драгоценных камней, вместо того, чтобы пытаться найти их по всему миру.

Если вы уже используете с bundle exec , каковы преимущества:

 $ which ruby
$ which bundle
 

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

1. $ which ruby ВОЗВРАТ /home/sheriff/.rbenv/shims/ruby . То же самое относится и к бандлу. Но $ which rails возвращается /usr/local/bin/rails . Я не уверен, почему прокладки не создаются для рельсов. Я пытался gem install rails rbenv rehash

2. linux попробуйте найти двоичные файлы в соответствии с порядком в вашем $PATH env var. Это означает, что вы установили rails глобально один раз, и он был установлен на /usr/local/bin/rails . Попробуйте принудительно rbenv использовать двоичные файлы до /usr/local/bin того, как они появятся на вашем ПУТИ, добавив в свои .bashrc следующие строки: export PATH=$HOME/.rbenv/bin:$PATH и export PATH="$HOME/.rbenv/shims:$PATH"

Ответ №2:

Попробуйте сделать следующее.

 gem install bundler:2.1.4
gem update --system