Ruby на Mac OSX Sierra через порты Mac

Я на macOS Сьерра. Я установил ruby ​​2.5 через macports (/opt/local/bin/ruby2.5). Тем не менее, у меня также есть ruby ​​2.0, который находится в / usr / bin / ruby ​​- не уверен, откуда это взялось - это не пакет macports. Как заставить мою систему использовать более новую систему ruby ​​2.5? Когда я пытаюсь удалить / переименовать / usr / bin / ruby, я получаю сообщение "Операция не разрешена" даже как суперпользователь.

1 ответ

/usr/bin это Apple-земля. Вы не должны изменять его, и Apple реализовала функцию под названием "Защита целостности системы" (SIP), которая активно предотвращает изменение файлов с включенной защитой, одна из которых /usr/bin/ruby, Есть способы отключить SIP, но есть и лучшие альтернативы для изменения рубина по умолчанию.

Вместо этого, общий метод предпочтения определенных версий самоинсталлируемых инструментов состоит в $PATH так что папка под вашим контролем появляется раньше /usr/bin, MacPorts уже делает это, предваряя /opt/local/bin, Однако MacPorts по умолчанию не создает /opt/local/bin/ruby -> ruby2.5 symlink, потому что у вас может быть установлено несколько версий Ruby, и он не будет знать, какую из них вы хотите сделать по умолчанию.

По этой причине MacPorts поставляется с механизмом под названием port select (увидеть port help select), который позволяет вам управлять /opt/local/bin/ruby символическая. В твоем случае, port select --list ruby должен показать список вариантов, и sudo port select --set ruby ruby25 должен сделать ruby2.5 по умолчанию. Обратите внимание, что оболочки обычно кэшируют поиск от имени команды до пути, который ее предоставляет, поэтому это будет эффективно только после открытия новой оболочки или запуска hash -r в текущем.

В конкретном случае Ruby также доступны инструменты для одновременного управления различными версиями Ruby, такими как rbenv и rvm.

Другие вопросы по тегам