'sudo gem install' или 'gem install' и расположение гемов

Запуск "sudo gem list --local" и "gem list --local" дает разные результаты. Путь к моему драгоценному камню установлен в мою домашнюю папку и содержит только драгоценные камни из "gem list --local".

Наверное, нехорошо устанавливать драгоценные камни в разные каталоги на моем компьютере, поэтому следует ли мне настроить путь к драгоценным камням по-другому и всегда ли я использовать sudo при установке чего-либо?

my ~/.profile
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

~ / .bash_profile пуст.


person raphael_turtle    schedule 22.01.2010    source источник
comment
Я думаю, что это правильный вопрос для тех из нас, кому приходится использовать драгоценный камень, требующий привилегий root.   -  person Kelly    schedule 17.08.2011
comment
Связано: http://stackoverflow.com/questions/21141584/rails-is-not-using-my-global-ruby-version. Я использую rbenv для управления версиями Ruby и столкнулся с проблемой, потому что использовал sudo gem install rails вместо gem install rails.   -  person Dennis    schedule 15.01.2014
comment
Я думаю, что это правильный вопрос для тех из нас, кому приходится использовать драгоценный камень, требующий привилегий root. Я думаю, что любой драгоценный камень, которому требуются привилегии root для установки или запуска, очень подозрителен. Драгоценные камни должны иметь возможность запускаться в песочнице и запускаться с разрешениями пользователя.   -  person the Tin Man    schedule 31.07.2014
comment
sudo - это заряженное ружье, направленное к вашей ноге. Использовать его, не понимая, что он делает и как может повлиять на вашу систему, - все равно что нажимать на спусковой крючок с закрытыми глазами. Вы можете прострелить себе ногу, а можете и нет, но в любом случае вы не хотите рисковать, если не знаете, как исправить повреждение. Использование sudo записывает в принадлежащий системе Ruby, который в Mac OS был установлен Apple для их собственных нужд. Мы можем использовать это, но изменение неправильного объекта может нарушить их код. Вот почему мы устанавливаем из исходников или используем что-то еще для установки, где мы можем безопасно настроить это.   -  person the Tin Man    schedule 06.11.2015


Ответы (8)


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

Вместо этого я рекомендую вам установить RVM и начать счастливую жизнь с портативными домами из драгоценных камней и другой версией Руби все живет под одной крышей.

Для непосвященных, из документации:

RVM - это инструмент командной строки, который позволяет нам легко устанавливать, управлять и работать с множеством рубиновых сред и наборов драгоценных камней.

Причина, по которой установка гемов с sudo хуже, чем просто gem install, заключается в том, что они устанавливают гем для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ как root. Это может быть хорошо, если вы единственный человек, использующий машину, но в противном случае это может вызвать странности.

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

Если вы решите использовать RVM, тогда использование sudo вызовет всякие странности, потому что каждая версия Ruby, которую вы устанавливаете через RVM, имеет свой собственный GEM_HOME.

Кроме того, хорошо, если вы можете сделать свою среду разработки как можно ближе к производственной среде, а в производственной среде вы, скорее всего, будете устанавливать драгоценные камни как пользователь без полномочий root.

person jonnii    schedule 22.01.2010
comment
+1 за предложение rvm, но -1 за сбивающее с толку осуждение альтернативной возможности просто использовать sudo - person tfwright; 22.01.2010
comment
Хорошо, но все ваши причины сводятся к тому, что RVM настолько хорош, а не потому, что использование sudo особенно вредно. Единственный раз, когда вы этого не хотите, - это конкретная ситуация, когда вы находитесь на общем компьютере. Если вы хотите порекомендовать rvm, просто сделайте это. Нет необходимости прибегать к FUDD. - person tfwright; 22.01.2010
comment
Я стараюсь не распространять FUD, и я пытался привести причины, не связанные с RVM, прошу прощения, если это так кажется. - person jonnii; 22.01.2010
comment
RVM - хороший вариант. Но вам стоит попробовать более качественный RBENV. Это менее навязчиво, чем RVM. - person Andres; 24.11.2012
comment
Как человек, мало разбирающийся в Ruby, я упускаю из виду причины, лежащие в основе каждого утверждения этого ответа. Почему я должен использовать разные версии Ruby одновременно? Почему установить программу для всех пользователей - проблема. Стандартной практикой в ​​* nix является установка чего-либо от имени пользователя root, но запускать их от имени пользователя с ограниченными правами. Почему это отличается в мире Ruby? О каких странностях вы говорите? И так далее. - person Hontvári Levente; 17.12.2014
comment
@ HontváriJózsefLevente: сложно ответить на все ваши вопросы в комментарии, но суть в том, что вы хотите, чтобы ваша среда разработки была как можно ближе к производственной. если вы работаете над двумя приложениями, одно из которых использует ruby ​​2.1, а другое - пользователи 1.9, вам необходимо убедиться, что в вашей локальной среде используется правильная версия. это то, что для вас делают RVM или RBENV. Вы могли бы использовать его по той же причине, что и любую среду песочницы, но основным преимуществом в этом случае является изоляция. Надеюсь, это поможет! - person jonnii; 17.12.2014
comment
@jonii: Насколько я понимаю, рекомендация против sudo действительна для машин разработки. А как насчет серверов? Должны ли мы использовать там sudo? - person Hontvári Levente; 19.12.2014
comment
@ HontváriJózsefLevente, это зависит от вашей среды. у меня нет никаких конкретных рекомендаций, кроме как посмотреть, что работает лучше всего. - person jonnii; 20.12.2014
comment
Обратите внимание, что сломанный или вредоносный гем может выполнять произвольные команды. Например, github.com/wmorgan/killergem пытается во время установки удалить все файлы в корневом каталоге. - person reducing activity; 13.01.2015
comment
На практике вы редко будете размещать несколько приложений с разными рубиновыми версиями. RVM является излишним для продакшена, поэтому пока он вам не понадобится, не беспокойтесь об его использовании. Я много лет использовал RVM в производстве и удалил его, и теперь это одна вещь меньше, о которой мне нужно беспокоиться. Когда у вас есть докер-контейнеры, его так легко перестроить с новой версией Ruby, если вам нужно обновить. - person Andrew WC Brown; 16.11.2015

Вы также можете установить драгоценные камни в своей локальной среде (без sudo) с помощью

gem install --user-install <gemname>

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

Вы можете проверить, куда идут драгоценные камни, посмотрев на них с помощью gem environment. В моем случае это «~ / .gem / ruby ​​/ 1.8».

Если вам нужны двоичные файлы из локальных установок, добавленные в ваш путь, вы можете добавить что-нибудь в свой bashrc, например:

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

(из http://guides.rubygems.org/faqs/#user-install )

person Nils    schedule 18.08.2013
comment
+1 за эту опцию, а не решения с помощью еще одного инструмента конфигурации выше, RBENV / RVM. - person jjpe; 11.11.2014
comment
Я создаю гем, и согласно руководствам я должен сделать rake install, а чтобы исправить sudo isse, мне пришлось вручную пропатчить /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb добавление --user-install туда. Не могу найти лучшего решения, потому что, похоже, rake install не принимает дополнительные параметры. - person Nakilon; 09.03.2015
comment
Я абсолютно в восторге от этой первой команды. Я пытался установить драгоценные камни, и у меня возникли проблемы, потому что у меня нет прав sudo. Эта команда сработала !!!! - person Caleb Kleveter; 15.12.2015

А еще лучше, поместите --user-install в свой файл ~ / .gemrc, чтобы вам не приходилось вводить его каждый раз

gem: --user-install
person allyraza    schedule 11.11.2015

В случае, если вы

  • установил рубиновые драгоценные камни с помощью sudo
  • хочу установить драгоценные камни без sudo
  • не хочу устанавливать rvm / rbenv

добавьте в свой .bash_profile следующее:

export GEM_HOME=/Users/‹your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

Откройте новую вкладку в Терминале ИЛИ source ~/.bash_profile, и все готово!

person David Salamon    schedule 27.11.2016
comment
Для тех, кто не работает с Ruby, Rails, Rake и всем остальным, что разработчики Ruby используют / хотят использовать, ЭТО решение намного проще, чем использование rvm. Меня действительно не волнуют разные версии Ruby, я просто хочу запускать некоторые программы оболочки, распространяемые как драгоценные камни. Спасибо! - person Kevin G.; 14.12.2016

sudo gem install --no-user-install <gem-name>

установит ваш гем глобально, т. е. он будет доступен для всех контекстов пользователя.

person Tasos Koutoumanos    schedule 27.05.2015
comment
Он также может перезаписать установленный поставщиком гем, который, возможно, ожидает, что эта ОС будет установлена ​​на определенную версию. И это может нарушить код, который на него полагается. - person the Tin Man; 06.11.2015
comment
... или он может установить драгоценный камень, который не предоставляет поставщик, и сделать это таким образом, чтобы сделать его доступным для всех пользователей системы. Немного обидно, что все ответы везде предполагают, что читатель - это разработчик, а не системный администратор, который на самом деле действительно хочет сделать конкретную версию гема доступной для всех пользователей. : D - person dannysauer; 19.04.2019

Связанный (для пользователей сборщика), если вам нужна более легкая альтернатива RVM, которая поместит все в хорошо известный каталог для конкретного пользователя, я рекомендую использовать:

bundle install --path $HOME/.gem

если вы хотите установить драгоценные камни в то же место, что

gem install --user-install GEMNAME

установит их .gem/ruby/RUBYVERSION в ваш домашний каталог. (См. Другой комментарий к этому вопросу о --user-install.)

Это сделает драгоценные камни видимыми для gem list, их можно будет удалить через gem uninstall и т. Д. Без необходимости sudo доступа. Запускаемые скрипты, установленные гемом или сборщиком, могут быть помещены в ваш путь, добавив

$HOME/.gem/ruby/RUBYVERSION/bin

к вашему $PATH. gem сам сообщает вам об этом, если он не установлен, когда вы делаете gem install --user-install.

person Todd Vierling    schedule 30.07.2015
comment
Спасибо за это. Можно ли сделать так, чтобы бандлер делал это по умолчанию? (И если да, будет ли это хорошей идеей?) - person joshtch; 13.03.2019

Вы можете установить драгоценные камни в определенную папку (например, vendor /) в вашем приложении Rails, используя:

bundle install --path vendor
person Chadi    schedule 16.12.2013
comment
Этот. В наши дни единственная программа, которая должна нуждаться в sudo для установки программного обеспечения, - это ваш менеджер пакетов. - person tjbp; 22.07.2016

Установка драгоценных камней Ruby на Mac - частый источник путаницы и разочарования. К сожалению, большинство решений являются неполными, устаревшими и дают плохие советы. Я рад, что в принятом ответе здесь говорится НЕ использовать sudo, что вам никогда не нужно делать, особенно если вы не понимаете, что он делает. Хотя я использовал RVM много лет назад, я бы порекомендовал chruby в 2020 году.

В некоторых других ответах здесь представлены альтернативные варианты установки драгоценных камней, но они не упоминают об ограничениях этих решений. Чего не хватает, так это объяснения и сравнения различных вариантов, а также того, почему вы можете выбрать один из них. Я попытался охватить наиболее распространенные сценарии в моем подробное руководство по установке гемов Ruby на Mac.

person monfresh    schedule 02.11.2020