Я новичок, извините, если я говорю или делаю то, что вы считаете совершенно глупым. Я не делаю это специально.

Как это началось: я хотел установить гем, но получил следующее сообщение об ошибке:

ERROR:  While executing gem ... (Gem::FilePermissionError)
   You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory

Каким-то образом моя система, по-видимому, все еще использует версию Ruby, поставляемую с MacOS, которая дает это разрешение ошибки Он должен использовать недавно установленную версию 2.6.1., Которую я установил с помощью Homebrew.

Итак, после интернет-исследования я установил rvm и попытался сделать Ruby 2.6.1 по умолчанию:

~rvm --default use 2.6.1
Required ruby-2.6.1 is not installed.

Так что rvm говорит мне, что Ruby 2.6.1 не установлен. Но доморощенного настаивает он установлен:

~brew upgrade ruby
Error: ruby 2.6.1 already installed

Должен ли я удалить доморощенный Ruby и снова установить Ruby через rvm?

2 ответа2

0

Прежде всего, ничего, что вы говорите или делаете, не будет звучать глупо. Мы все были новичками в какой-то момент.

Причина, по которой ваш Mac не распознает версию Ruby, установленную Homebrew, заключается в том, что по умолчанию компьютер ищет исполняемые программы только в определенных каталогах. Список каталогов и порядок, в котором их ищет компьютер, называется PATH . Если вы введете echo $PATH в Terminal, вы увидите список каталогов, разделенных двоеточием. По умолчанию в новой установке MacOS список выглядит так:

/usr/bin:/bin:/usr/sbin:/sbin

Во время установки Homebrew создается новый каталог /usr/local/bin и добавляется в начало PATH . Однако когда вы устанавливаете Ruby с помощью Homebrew, Ruby устанавливается в /usr/local/opt/ruby/bin , который не добавляется в PATH автоматически. Я знаю это, потому что это упоминается Homebrew в конце установки Ruby. По общему признанию, сообщение, возможно, не имеет большого значения для новичка:

If you need to have ruby first in your PATH run:
  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

Поскольку версия Ruby для Homebrew отсутствовала в вашем PATH , когда вы ввели gem install [some gem] , компьютер сначала искал программу под названием gem в /usr/local/bin и не нашел ее, а затем искал он находится в /usr/bin и нашел его, потому что именно там установлен системный gem (версия gem , поставляемая с macOS).

Если вы хотите узнать, какая версия конкретной программы используется в текущем сеансе терминала, вы можете использовать команду which . Например:

which ruby
which gem

Это скажет вам местоположение программы, где компьютер впервые нашел ее.

Еще одна команда, которую вы можете использовать, чтобы увидеть, используете ли вы правильную версию Ruby:

ruby -v

Если вы запустили эту команду:

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

и затем открыли новое окно терминала или вкладку (или запустили source ~/.bash_profile), чтобы изменения вступили в силу, каталог Homebrew Ruby был бы первым в вашем PATH , что означает, что ваш компьютер сначала искал бы там gem , и он бы использовал версию Ruby Homebrew.

Чтобы объяснить команду выше, она берет все между одинарными кавычками и добавляет ее (>>) в файл с именем .bash_profile в корневом каталоге вашего пользователя (~/). Каждый раз, когда вы открываете новое окно или вкладку терминала, читается .bash_profile , и все, что там определено, используется.

Точно так же причина, по которой RVM не может распознать, что Ruby 2.6.1 был установлен Homebrew, заключается в том, что RVM и Homebrew устанавливают Ruby в двух разных местах, которые не знают друг о друге. Когда вы впервые установили RVM, была установлена версия 2.6.0. Я не уверен, почему он не установил 2.6.1, но я помню, что в прошлом, когда я использовал RVM, он не всегда устанавливал последнюю версию. Лично я предпочитаю chruby и ruby-install для управления версиями Ruby.

Хорошая особенность таких инструментов, как RVM, chruby и rbenv, заключается в том, что они позволяют устанавливать несколько версий Ruby на одном компьютере и легко переключаться с одной на другую. Homebrew, с другой стороны, может одновременно управлять только одной версией Ruby.

0

Я удалил Ruby с помощью Homebrew. brew uninstall ruby

Затем попытался установить Ruby с помощью RVM. rvm install ruby

Уже дал уже установленный ruby-2.6.0. Для переустановки используйте:

rvm reinstall ruby-2.6.0

Поэтому я решил переустановить его с помощью RVM. Это, наконец, решило проблему, я смог установить драгоценные камни. Однако я до сих пор не уверен, почему возникла проблема с установкой Homebrew для Ruby.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .