#ruby #homebrew
#ruby #homebrew
Вопрос:
Мне нужно запустить 2.5.3. Я использую brew для управления установкой ruby (поскольку я не смог заставить rvm работать на моей машине). Когда я запускаю
$ruby -v
Я получаю
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
Однако, когда я пытаюсь обновить его с помощью
brew upgrade ruby
Я получаю
Error: ruby 2.6.1 already installed
Почему так непоследовательно, какую версию ruby я действительно установил?
Комментарии:
1. По-видимому, у вас есть и то, и другое.
which ruby
,ls -l $(which ruby)
иecho $PATH
должны дать некоторое представление.
Ответ №1:
Вы должны использовать менеджер версий Ruby для управления несколькими версиями Ruby. Я предпочитаю использовать rbenv. Ниже приведены шаги по его установке на Mac (они подробно объясняются о том, что делается и почему; если вам нужен ярлык, попробуйте выполнить все команды последовательно, но я все равно настаиваю, чтобы вы ознакомились с шагами).
rbenv
Прежде чем приступить к фактической установке, запомните эти пункты:
rbenv
само по себе не включает в себя возможность установки версий ruby. Это изменяет только версию ruby для каждого каталога. Для установки rubies вам необходимо установить инструмент ruby-build (который является частью проекта rbenv). То же самое относится и к chruby, который использует другой инструмент для сборки ruby. ПРАВКА (июнь 2021): Похоже, что установки rbenv теперь поставляются с ruby-build и способны компилировать ruby прямо на вашем компьютере. Я оставлю ответ таким, какой он есть, чтобы он имел смысл для кого-то на более старой установке (или на случай, если они вернут это решение позже).ruby-build
должен быть установлен как плагин к rbenv.- На случай, если вам нужно подробнее ознакомиться с инструментами, вот ссылки на rbenv и ruby-build.
- Процедура установки обоих инструментов (и множество других справочных материалов) доступна в файлах README для проектов. Обратитесь к ним, если у вас что-то не работает.
Установка rbenv
Выполните следующую команду, чтобы клонировать репозиторий rbenv в .rbenv
каталог вашего домашнего каталога.
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Ваша система по-прежнему не знает, где находится rbenv. Добавьте ее в свой path, выполнив:
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
Чтобы инициализировать rbenv, чтобы он мог помочь вам с изменением rubies при смене каталогов, запустите это:
~/.rbenv/bin/rbenv init
Это должно подсказать вам что-то вроде этого:
# Load rbenv automatically by appending
# the following to ~/.bash_profile:
eval "$(rbenv init -)"
Итак, запустите это:
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
К этому моменту rbenv должен быть установлен. При запуске rbenv
в командной строке должно получиться что-то вроде этого:
$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]
Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version
rehash Rehash rbenv shims (run this after installing executables)
version Show the current Ruby version and its origin
versions List all Ruby versions available to rbenv
which Display the full path to an executable
whence List all Ruby versions that contain the given executable
See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme
ПРИМЕЧАНИЕ: Если вы получите предупреждение о том, что rbenv не установлен, просто запустите source ~/.bash_profile
. Это приведет к повторному запуску ~/.bash_profile
скрипта и получению rbenv на вашем пути. После этого вы должны быть в состоянии запускаться rbenv
без проблем.
Обратите внимание, что rbenv пока не предоставляет возможности установки или удаления rubies. Для этого нам нужно установить ruby-build.
Установка ruby-build
Нам нужно добавить пакет ruby-build в качестве плагина rbenv, чтобы мы могли ввести rbenv install <ruby version>
для установки rubies. Все, что вам нужно сделать, это создать каталог плагинов и проверить репозиторий git для ruby-build в каталоге плагинов. Запустите следующее:
$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
Проверка, установлены ли rbenv и ruby-build
Запуск rbenv без каких-либо аргументов в терминале теперь должен показать, что команды установки и удаления доступны. Что-то вроде этого:
$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]
Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version
install Install a Ruby version using ruby-build
uninstall Uninstall a specific Ruby version
rehash Rehash rbenv shims (run this after installing executables)
version Show the current Ruby version and its origin
versions List all Ruby versions available to rbenv
which Display the full path to an executable
whence List all Ruby versions that contain the given executable
See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme
Если вы видите этот вывод, ваш rbenv установлен правильно.
Установка ruby
Чтобы установить ruby 2.5.3, вы могли бы запустить (подождите, пока не запускайте его):
rbenv install 2.5.3
Он должен вывести несколько строк, занять некоторое время, а затем сообщить вам, что установлена версия 2.5.3. Однако существует проблема — при сбое установки, особенно во время компиляции, иногда терминал зависает, и на терминале нет выходных данных. Просто кажется, что она устанавливается надолго (навсегда). Чтобы получить больше информации о том, что происходит, выполните следующее:
rbenv install -f -v 2.5.3
-f
Аргумент указывает rbenv принудительно установить данную версию. Итак, если он уже установлен, rbenv переустановит (в основном перезапишет) данную версию. Поэтому, если установка завершилась неудачей, -f
убедитесь, что установка завершена.
-v
Аргумент указывает rbenv выводить подробные сообщения. Таким образом, вам будет показано все, что делает ruby-build (включая процесс компиляции). Не пугайтесь здесь слова «компиляция«. Обычно она отлично компилируется без проблем и не изменяет вашу систему ruby (ту, которая установлена с sudo apt install ruby
в Linux, или ту, которую вы получаете по умолчанию в macOS) независимо от того, успешно она работает или нет.
Тестовая установка
После успешной установки вы можете запустить приведенную ниже команду, чтобы проверить, какие версии установлены (выходные данные приведены во фрагменте ниже):
$ rbenv versions
system
* 2.5.3 (set by /home/ubuntu/.rbenv/version)
Примечание: на Mac у вновь установленного ruby будет другой путь.
Тот, перед которым стоит *
, активен прямо сейчас. Если вы запустите which ruby
, вы должны получить путь с прокладкой ruby. Если вам интересно, прочитайте документацию rbenv, чтобы узнать, что такое оболочки, хотя вам не придется беспокоиться о них.
$ which ruby
/home/ubuntu/.rbenv/shims/ruby
Настроить и забыть
rbenv — классная штука, но продолжать писать rbenv shell 2.5.3
и rbenv shell 2.4.5
каждый раз становится проблемой. Вместо этого вам следует установить версию ruby для каталога и забыть о rbenv.
Вы можете просто создать файл с именем .ruby-version
, содержащий одну строку — номер версии ruby, который вы хотите использовать для всех скриптов ruby в этом каталоге (и подкаталогах). Просто перейдите в нужный каталог и запустите:
echo "2.5.3" > .ruby-version
После этого все скрипты ruby в этом каталоге и подкаталогах будут использовать версию 2.5.3.
Комментарии:
1. Спасибо за ваш подробный ответ, не могли бы вы добавить абзац о разнице между rbenv и rvm?
2. @OrtomalaLokni есть много статей, объясняющих детали, и есть детали более низкого уровня, которые я не могу просто объяснить в одном абзаце. Это не имело бы смысла. Возможно, я напишу сообщение и свяжу его здесь. Но я еще не описал различия подробно. Сделаю это со временем. 🙂
3. может быть, тогда вы сможете объяснить разницу между rbenv и rvm в одном предложении?
4. Есть 3 основных отличия: 1) RVM может предоставлять вам готовые двоичные файлы, в то время как и chruby, и rbenv компилируют Ruby в вашей системе. 2) RVM переопределяет оболочку и в основном заменяет команду ‘cd’, которая сама по себе может вызвать проблемы. Rbenv использует прокладки путей (ссылка уже есть в ответе). 3) Файлы версий RVM (
.rvmrc
) представляют собой полноценные скрипты и выполняются , в то время как файлы версий rbenv (.ruby-version
) представляют собой простые текстовые файлы, содержащие версию ruby, которая будет использоваться в каталоге.5. Дополнение к пункту (3) из предыдущего ответа: версия Ruby может быть переключена для текущей оболочки, текущего каталога и глобальной системы. Вот отличная статья: makandracards.com/makandra /…
Ответ №2:
Я хотел бы поблагодарить Вайбхава за его информативный ответ. Я еще не пытался установить rbenv, но обязательно попробую это. На данный момент я смог обойти эту проблему, не указывая версию ruby в моем файле gem. Это краткосрочное решение, но оно сработало!
Комментарии:
1. вы могли бы добавить комментарий в качестве комментария под ответом. в любом случае, если ответ помогает / работает для вас, вы могли бы дать ему положительные отзывы или сделать его правильным ответом, вместо того, чтобы говорить спасибо
2. Я поддержал это, к сожалению, у меня недостаточно «кармы», чтобы оно могло зарегистрироваться публично.
3. Спасибо @Andrew 🙂 На всякий случай, если вы когда-нибудь захотите развернуть Rails, я написал подробное руководство по развертыванию Rails . Ответ, который я опубликовал, на самом деле является частью этого руководства. Вы можете обратиться к этому, когда это необходимо. Я надеюсь, что это поможет.