'sudo gem install' или 'gem install' и местоположения гемов


144

Беги ' 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 пуст.


1
Я думаю, это правильный вопрос для тех из нас, кому приходится использовать драгоценный камень, требующий привилегий root.
Келли

По теме: stackoverflow.com/questions/21141584/… . Я использую rbenv для управления версиями Ruby и столкнулся с проблемой, потому что использовал sudo gem install railsвместо gem install rails.
Деннис

3
«Я думаю, это правильный вопрос для тех из нас, кому приходится использовать драгоценный камень, требующий привилегий root». Я считаю, что любой драгоценный камень, которому требуются привилегии root для установки или запуска, очень подозрительный. Драгоценные камни должны иметь возможность запускаться в песочнице и запускаться с разрешениями пользователя.
Железный Человек

1
sudoзаряженный пистолет направлен к вашей ноге. Использовать его, не понимая, что он делает и как может повлиять на вашу систему, - все равно что нажимать на курок с закрытыми глазами. Вы можете прострелить себе ногу, а можете и нет, но в любом случае вы не хотите рисковать, если не знаете, как исправить ущерб. Использование sudoзаписи в системный Ruby, который в Mac OS был установлен Apple для собственных нужд. Мы можем использовать это вместе, но изменение неправильной вещи может сломать их код. Вот почему мы устанавливаем из исходников или используем что-то еще для установки, где мы можем безопасно настроить это.
Железный Человек

Ответы:


147

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

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

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

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

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

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

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

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


12
+1 за rvm предлагаю, но -1 за сбивающее с толку осуждение альтернативной возможности просто использовать sudo
tfwright

10
Хорошо, но все ваши причины сводятся к «потому что RVM настолько хорош», а не потому, что использование sudo особенно вредно. Единственный раз, когда вы этого не хотите, - это конкретная ситуация, когда вы находитесь на общем компьютере. Если вы хотите порекомендовать rvm, просто сделайте это. Нет необходимости прибегать к FUDD.
tfwright

7
Я стараюсь не распространять FUD, и я пытался привести причины, не связанные с RVM, прошу прощения, если это так кажется.
jonnii

10
RVM - хороший вариант. Но вам стоит попробовать более качественный RBENV. Это менее навязчиво, чем RVM.
Андрес

4
@ HontváriJózsefLevente: сложно ответить на все ваши вопросы в комментариях, но суть в том, что вы хотите, чтобы ваша среда разработки была как можно ближе к производственной. Если вы работаете над двумя приложениями, одно из которых использует ruby ​​2.1, а другое - пользователи 1.9, вам необходимо убедиться, что в вашей локальной среде используется правильная версия. это то, что для вас делают RVM или RBENV. Вы бы использовали его по той же причине, что и любую среду песочницы, но основным преимуществом в этом случае является изоляция. Надеюсь, это поможет!
jonnii

130

Вы также можете установить драгоценные камни в своей локальной среде (без 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 )


25
+1 за эту опцию, а не решения «Еще один инструмент конфигурации» выше, RBENV / RVM.
jjpe

1
Я создаю гем, и согласно руководствам, которые я должен сделать, rake installи чтобы исправить sudo isse, мне пришлось вручную исправить /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbдобавление --user-installтам. Не могу найти лучшего решения, потому что похоже rake installне принимает дополнительные параметры.
Nakilon

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

35

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

gem: --user-install

14

Если вы

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

добавьте в свой .bash_profile:

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

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


8
Для тех, кто не работает с Ruby, Rails, Rake и всем остальным, что разработчики Ruby используют / хотят использовать, ЭТО решение намного проще, чем использование rvm. Меня действительно не волнуют разные версии Ruby, я просто хочу запускать некоторые программы оболочки, распространяемые как драгоценные камни. Спасибо!
Кевин Г.

9

Связанный (для пользователей сборщика), если вам нужна более легкая альтернатива 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.


Спасибо за это. Можно ли сделать это по умолчанию? (И если да, то будет ли это хорошей идеей?)
joshtch

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

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


1
Он также может перезаписать установленный поставщиком гем, который, возможно, будет установлена ​​в ОС для определенной версии. И это может нарушить код, который на него полагается.
Железный Человек

1
... или он может установить драгоценный камень, который не предоставляет поставщик, и сделать это таким образом, чтобы сделать его доступным для всех пользователей системы. Это мягко обострение , что все ответы везде предполагать , что читатель является DEV v / са сисадмина , который на самом деле делает хотите сделать определенную версию драгоценного камня , доступного для всех пользователей. : D
dannysauer

1

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

bundle install --path vendor

Этот. В наши дни единственная программа, которая требует sudo для установки программного обеспечения, - это менеджер пакетов.
tjbp

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.