Как удалить все старые Ruby версии (и менеджеры версий) и переустановить одну протестированную версию на macOS 10.14.6? - PullRequest
0 голосов
/ 13 апреля 2020

Как удалить (все старые Ruby вещи), переустановить (желательно одну и только одну Ruby версию) и протестировать всю мою среду Ruby (versionmgrs, gems, однако это работает) на моем macOS 10.14 .6 система, использующая метод "Ruby -общинный предпочтительный" (какой-то менеджер установки / версии или подобное транспортное средство)?

Я ищу всю процедуру для всего, что связано с Ruby -средой окружающей среды: Ruby "движок", менеджеры версий, .bash_profile правки и т. д. c.

Несмотря на то, что мы (моя команда) не являемся Ruby разработчиками, мы работаем с несколькими Ruby приложениями, такими как Asciidoctor . Таким образом, мы просто пользователи и не инвестируем в изучение всех деталей Ruby, кроме попыток заставить приложения (такие как Asciidoctor) работать без проблем, и все.

1. Удалить .

Я хочу полностью удалить каждый маленький Ruby файл, найденный в системе (кроме стандартного Ruby материала на основе Apple.com, который поставляется с macOS - я не хочу удалять или даже использовать этот материал, когда-нибудь, если я могу избежать этого). Основанные на Hombrew, rbenv и rvm, и любые другие Ruby thing / version_manager / intstalled_directory (кажется, что существует множество различных процедур и нет одной "стандартной процедуры установки - что нас всех смущает).

Поэтому, пожалуйста, рассмотрите все исторические Ruby -измы, которые могли быть установлены за всю историю или Ruby, потому что есть вероятность, что я устанавливал их с самых ранних дней Ruby, и у меня / у нас все еще остается тот же образ macOS, который мы переносили (через модернизированное аппаратное обеспечение MacBook).

И, по-видимому, наиболее разумно убедиться, что все эти вещи пропали (или, по крайней мере, удалены) функционального пути), чтобы убедиться, что у нас есть чистый лист, чтобы ...

2. Переустановите .

Что именно мы точно устанавливаем и почему мы устанавливаем, неясно. Зачем нам нужно что-то для управления версиями Ruby, когда нам нужна только одна ? Есть ли какая-то причина, почему нам нужно несколько версий Ruby? И сделать нам нужно отделить Ruby "вещи" отдельно от Ruby "менеджера версий"? Существует ли ресурс «Установка Ruby для не-1110 * -разработчиков», чтобы помочь нам в этом?

(я не знаком с термином «менеджер версий», чтобы описать фактический версия программного обеспечения интерпретатора / компилятора . Я, как давний менеджер swdev, привык к управлению версиями программного обеспечения , которые разрабатывают мои команды . Мы предполагаем, что это может быть обусловлено в мире Ruby может и не пытаться навязывать столько же совместимости с Ruby -версиями, но мы только размышляем. Конечно, мы склонны делать больше системного программирования на C / C ++ / Python и меньше web-speci c такие вещи, как JavaScript / Ruby. Возможно, у последнего меньше «Я разработчик, и я не пишу переносимый код для разных версий платформ / Я программист / разработчик платформы, который заботится меньше о совместимости между версиями. "Это новый мир для нас.)


3. Тестирование .

Когда закончите с # 2, я бы хотел автоматически диагностировать всю мою среду Ruby с помощью комплексного системного теста. Это возможно?

Если я не сделаю этого, история скажет мне, что позже я столкнусь с проблемой Ruby -wonky-environment. Если возможно, я хочу, чтобы все было «готово и забыто», и все в одном кадре, чтобы избежать будущих проблем.

Подумайте над историческими вещами, такими как make test (после make и make install ) и brew doctor.


Подробнее

Моя среда / подсистема Ruby в моей macOS 10.14.6 была вялой, сломанной и разочаровывающей. Указанная среда была результатом многих лет (десятилетий) Ruby вещей / слоев, накапливавшихся в моей среде macOS (которая со временем клонировалась на MacBook и поэтому была перенесена).

Я пытался восстановить и очистить его чтобы попытаться получить некоторый уровень здравомыслия. В основном (?), Кажется, работает, по крайней мере для бега. Но rvm связанные вещи все еще терпят неудачу - и мне даже нужно rvm (неясно, как и многие вещи в Ruby настройке для не Ruby разработчиков). И у меня все еще есть много ruby -измов, висящих вокруг в .bashrc, которые выглядят нездоровыми (почему так много $PATH записей ..?), Или, по крайней мере, мне неудобно.

Я нашел по крайней мере 20 различных ссылок «переустановить / перестроить» на StackExchange.com и в других местах, многие из которых предлагают различные процедуры на основе Homebrew.

My gem env output . Обратите внимание на все эти разные версии, связанные с некоторым ruby -подобным компонентом:

3.1.2, 2.7.0, 2.7.1, 2.2.1, 2.2.0, 1.1.2

Это шесть разных версий подсистемы. В моей книге это плохо.

(я не Ruby разработчик, поэтому прошу прощения за мой плохой Ruby "синтаксис".)

Видимо Ruby участники сообщества зациклен на концепции нескольких версий Ruby, установленных на одной ОС; с классической c точки зрения системных администраторов старой школы (это я), несколько установленных версий Ruby - это то, чего моя команда хочет избежать. Может быть, нужно установить несколько версий Ruby в одной системе. Возможно, это связано с тем, что Ruby предлагает менее стабильные среды (функции, API и т. Д. c), чем другие программные системы, к которым мы привыкли. Независимо от этого, не зная больше, я бы предпочел управлять несколькими версиями Ruby с контейнерами (например, Docker).

С точки зрения этого пользователя: Ruby мир ощущается хаотично c и излишне сложным. С популярностью Ruby, я уверен, есть какая-то причина для этого. Мое предположение: Ruby значения функции улучшения по сравнению со стабильностью платформы. Это не самая лучшая вещь, когда я ношу шляпу сисадмина; это может быть забавно носить мою шляпу. Для этой миссии на мне надета только шляпа сисадмина.

Ответы [ 3 ]

3 голосов
/ 14 апреля 2020

Я обычно использую RVM, когда работаю на Linux ОС. Однако было время, когда я работал над macOS. Я много раз пытался установить RVM на macOS, но никогда не получалось, поэтому вместо этого я попробовал rbenv. У него были свои отличия от RVM, но он сделал всю работу за меня.

Возможно, это не тот ответ, который вы ищете, но в случае, если это так, вот шаги по установке rbenv:

  1. Введите brew install rbenv в терминале для установки rbenv.
  2. Добавьте команду eval "$(rbenv init -)" в ~/.bash_profile для автоматической загрузки rbenv при открытии терминала.
  3. Тип source ~/.bash_profile в терминале, чтобы применить изменения, внесенные в текущий сеанс оболочки.
  4. Введите type rbenv в терминале, чтобы убедиться, что rbenv настроен правильно. Ваш терминал должен отображать следующее:

    rbenv is a function
    rbenv ()
    {
        local command;
        command="${1:-}";
        if [ "$#" -gt 0 ]; then
            shift;
        fi;
        case "$command" in
            rehash | shell)
                eval "$(rbenv "sh-$command" "$@")"
            ;;
            *)
                command rbenv "$command" "$@"
            ;;
        esac
    }
    

А теперь для установки Ruby версий:

  • Для проверки доступных Ruby версий для установка, введите rbenv install -l в терминале.
  • Чтобы установить Ruby 5.5.0, введите rbenv install 5.5.0 в терминале.
  • Для проверки установленных Ruby версий введите rbenv versions.
  • Для сделайте Ruby 5.5.0 глобальной Ruby версией в вашей системе, введите rbenv global 5.5.0 в терминале.
  • Чтобы сделать Ruby 5.5.0 вашей Ruby версией в текущем каталоге, введите rbenv local 5.5.0 в терминале.
  • Чтобы проверить текущую версию rbenv Ruby, введите rbenv version.
  • И, конечно, введите ruby -v, чтобы убедиться, что настройка была выполнена правильно.
3 голосов
/ 14 апреля 2020

Использование полноценного Ruby Диспетчера версий

Вы пытаетесь установить один или несколько Ruby с помощью Homebrew, а затем надеетесь, что среда для ваших драгоценных камней останется в здравом уме. Не. Только не надо.

Установка Ruby через Homebrew может привести к странным конфликтам и сообщениям об ошибках, которые трудно разрешить. Вам будет гораздо лучше установить Ruby менеджер версий, например ch ruby, rbenv или RVM. Мало того, что это обычно работает лучше, но это будет разделять ваши гемы на основе интерпретатора, чтобы вы могли легко очистить свою среду Ruby, когда вы неизбежно столкнетесь с проблемами с гемами, библиотеками или обновлениями Xcode.

Вам нужно будет установить Xcode и его утилиты командной строки. Кроме того, я бы предложил ch ruby и ruby -install как простейшее решение для интеграции, но любой менеджер Ruby подойдет, если вы настроите его правильно.

0 голосов
/ 14 апреля 2020

(Обязательно посмотрите раздел Фон в конце этого ответа.)

Моя процедура

1. Удалите все существующий материал Ruby (за исключением Ruby системных файлов, установленных Apple для «основной системы» для macOS).

Это часть процедуры, в которой я менее уверен. Я спросил на superuser.com о "как удалить все возможные старые Ruby cruft" и импортирую все, что там узнал, в эту процедуру. Тем временем я обнаружил несколько вещей, связанных с Ruby (например: ~/.ruby-version), для которых я не мог легко найти какую-либо документацию / ссылку. Это было мини-приключение. Но вот что я придумала:

a) Товары для домашнего приготовления: brew uninstall ruby ruby-build rbenv и любые другие Ruby -ориентированные Homebrew пакеты. brew list | grep может быть полезно для поиска пакетов.

b) rvm uninstall - но, пожалуйста, сначала прочтите примечания о "старых файлах" ниже, чтобы сохранить прежнюю среду rvm для справка.

c) Любые другие деинсталляции (конечно, установки не для Apple-macOS), которые вы можете найти или подумать, возможно, включая инсталляции, которые являются результатом процедур, найденных в https://rvm.io и https://github.com/rbenv/rbenv и любые другие менеджеры версий , которые вы можете найти / придумать.

2. Удалите или переместите старый Ruby файл сброса с $HOME

Я переместил файлы вместо их удаления, в соответствии с следующей процедурой. Обратите внимание, что перемещение ~/.rvm эффективно выполняет некоторые или все описанные выше процедуры (1b), сохраняя при этом старую среду ~/.rvm для (возможно, очень полезной) ссылки, например: для перестройки списка установленных камней. Также обратите внимание, что в вашем домашнем каталоге может быть более или менее «удаление файлов».

 cd $HOME
 mkdir -p .ruby-old-files/2020-04-13
 mv .rbenv/ .rvm/ .gem/ .ruby-version .ruby-old-files/2020-04-13/

3. (Пере) установить последнюю, «стабильную» (?) Rbenv / «ruby engine» для этой однострочной команды (это предполагает Homebrew уже установлен ), учитывая rbenv менеджер версий выбор, как описано в разделе Фон ниже:

brew update
brew install rbenv

Выше не установка «Ruby двигатель» через Homebrew; скорее, он устанавливает rbenv (через homebrew), который, в свою очередь, устанавливает «Ruby engine» следующим образом:

rbenv install $(rbenv install -l | grep -v - | tail -1)
rbenv global $(rbenv install -l | grep -v - | tail -1)

4. Комментируйте / удаляйте предыдущие ~/.bash_profile обновления с прошлых Ruby -измов

В итоге я закомментировал все эти строки с прошлых Ruby -приведенных обновлений, которые, как представляется, не используются и / или конфликтует с rbenv (ваш файл может не иметь ничего подобного):

#export PATH=$PATH:~/.gem/ruby/1.8/bin:/usr/local/opt/ruby/bin
#export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
#[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
# export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"

5. Добавьте это к ~/.bash_profile:

eval "$(rbenv init -)"

6. Запустите новое окно MacOS Terminal.app (или iTerm2 или аналогичное).

7. [Необязательно] Переустановите предыдущие драгоценные камни в новой среде.

Я просмотрел свой предыдущий список .rvm bin:

$ brew install tree
Warning: tree 1.8.0 is already installed and up-to-date
To reinstall 1.8.0, run `brew reinstall tree`
$ cd
$ tree -a .ruby-old-files/2020-04-13/.rvm/gems/ruby-2.2.1/bin/ -C | less
.ruby-old-files/2020-04-13/.rvm/gems/ruby-2.2.1/bin/
├── 3llo
├── _guard-core
├── asciidoctor
├── asciidoctor-safe
├── bundle
├── bundler
├── coderay
├── console
├── executable-hooks-uninstaller
├── github-markup
├── guard
├── imap-backup
├── listen
├── nokogiri
├── pry
├── rake
├── rdoc
├── ri
├── ruby_executable_hooks
├── setup
└── thor

0 directories, 21 files
$

(возможно, есть другие места, где можно найти существующие gems, как и в случае с Ruby, можно разбросать повсюду со многими "рубинами", как их называет сообщество Ruby), и запускает gem install [gem-package] для каждого пакета, который я хотел повторно использовать в своем новом (clean, fre sh и вменяемая) Ruby среда. Я провел несколько начальных asciidoctor тестов в довольно сложной библиотеке документов моей команды asciidoctor, и все сначала кажется хорошим.

Мы бы предпочли, чтобы существовал какой-то значительный Ruby -набор «самодиагностики» (более простая иллюстрация: brew doctor), чтобы дать пользователю гораздо больше уверенности в том, что его "Ruby двигатель" оптимально функционирует. Увы, пока я не вижу такой вещи для Ruby.

С этого момента, продвигаясь вперед, я могу обрести большую уверенность в построении нескольких "рубинов" через rbenv и только rbenv. Раньше я управлял несколькими рубинами с помощью нескольких установщиков / менеджеров версий (Homebrew, rvm и rbenv), что могло быть причиной многих проблем, возможно, по точке Тодда .

Справочная информация

Ruby имеет небольшую сложность и, возможно, работает намного лучше с диспетчером версий . Я нахожу это все немного необычным, по крайней мере, из моего десятилетнего опыта swdev + sysadmin. Я, конечно, вижу, как все эти механизмы могут быть очень мощными. Сейчас я просто пытаюсь заставить мою Ruby платформу работать .

Из того, что я могу сказать, не существует "одного стандартного способа" установки и запуска и стандартного каталог мест для Ruby в macOS. Это означает, что не существует «одного стандартного способа» удаления , и поэтому необходимо, если они (часто очень неосознанно , как я) установили много разных версий Ruby ( Я думаю, что назывался «Рубинами»?) В течение многих лет (десятилетий?) Во многих различных файлах / каталогах, контролируемых несколькими различными «менеджерами версий» (я думаю, подробнее о менеджерах версий в данный момент). ie, я считаю, что мне нужно "охотиться и клевать" за все исторические пути, которые прошли Ruby installs / version_managers Возможно, файлы / каталоги остались в разных областях.

Примечание это может произойти, если у вас есть образ macOS, который прожил много лет, а в моем случае был клонирован во многих поколениях MacBook. Для тех, кто на неделю ходит в загрузочный лагерь Ruby и устанавливает его в чистой системе, все должно работать просто замечательно. Для кого-то вроде меня, который был инженером / мгр на протяжении десятилетий и, возможно, имел всевозможные Ruby -измы, лежащие в основе его десятилетнего образа macOS (как указано многими многими приложениями / руководствами на основе Ruby о том, как установить вещи, не зная, что многие из этих процедур фактически конфликтуют друг с другом), это может быть совсем другая история.

Платформе Ruby, очевидно, требуется нечто, называемое Диспетчер версий для запуска Ruby платформы (интерпретатор, компилятор, движок, как бы он ни назывался). Я выбрал rbenv ( на основе этой ссылки ) менеджер версий для "установки" части моей процедуры после удаления / перемещения всех старых вещей.

Если это еще не очевидно, (предположительно?) лучше избегать одновременной установки и запуска нескольких менеджеров версий.

Варианты установки

Похоже, есть несколько способов установить Ruby «ядро / платформу ядра» (мой синтаксис, возможно, используемый только мной) в macOS, с тремя опциями, на которые я часто ссылаюсь, которые указаны ниже. (Обратите внимание, что есть множество других менеджеров версий на выбор, не перечисленных ниже.) Я выбрал rbenv на основе этой ссылки .

  1. через rbenv
  2. через rvm
  3. через Homebrew

(1.) И (2.) выше - механизмы, которые можно установить Ruby, и эти механизмы могут быть установлены через Homebrew. Но # 1 и # 2 не будут устанавливать Ruby через Homebrew. Это может сбивать с толку.

Похоже, что (1.) и (2.) также позволяют одновременно запускать несколько версий Ruby. (3.) не может. Это может быть полезно из-за проблем совместимости между версиями и гемами / приложениями с агрессивным (?) Движением Ruby, которое иногда происходит за счет обратной совместимости. (Я предполагаю, что здесь нет другого хорошего объяснения; сообщество, пожалуйста, прокомментируйте.)

Подход "удалить все старые Ruby движки и файлы" может быть экстремальным. Мой опыт: история Ruby - беспорядок, и за годы / десятилетия он оставил вокруг себя всякие грязные отклонения (в моем домашнем каталоге). Для меня нет ничего сложного в восстановлении драгоценных камней вручную - в моей системе их не так много. И, сохраняя вокруг уже существующие файлы Ruby -окружения, я (надеюсь) прикрываюсь, если мне когда-нибудь понадобится вернуть или перестроить материал. И сейчас все выглядит намного более "чистым и вменяемым", когда мне кажется, что я удалил всю старую грязь.

Еще больше фона

Моя команда и я только пользователи Ruby приложений, а не Ruby разработчиков, и не имеют большого опыта в сфере Ruby. Мы просто хотим устанавливать, использовать и обслуживать такие приложения, как Asciidoctor без необходимости углубляться во все эти вещи Ruby. Все работало хорошо в течение нескольких лет, а затем все «навороты» накапливались и начали ломать вещи. Когда я разобрал все это и правильно переустановил (см. Выше) - как только я наконец понял, как все Ruby входы и выходы работали - все снова заработало. Я считаю, что я, как простой пользователь Ruby -приложения, не должен был бы go к этому уровню усилий только для того, чтобы заставить Ruby приложение работать. Одним словом: не должно быть так сложно. Отсюда и природа моих комментариев о сложности.

Кроме того, у меня был плохой день, когда я впервые опубликовал этот вопрос, и излишне раздражал нескольких членов сообщества, которые изо всех сил пытались помочь - и снова мои извинения, это было совсем плохо - с тех пор я был назван парнем, который «любит много жаловаться». И я полностью заслуживаю того, чтобы этот ярлык был неуместным в нескольких моих комментариях. Опять же, я прошу прощения.

Кроме того: мои Ruby проблемы все еще существуют, хотят ли люди здесь отрицать это или просто обвиняют меня в проблемах за то, что я скуп. Несмотря на это: я не разочарован людьми, пытающимися помочь; Я разочарован тем, что платформа Ruby не поддерживает мой общий опыт.

Пожалуйста, обратите внимание Полезный ответ TamerB .

...