'sudo gem install' або 'gem install' та місця дорогоцінного каміння


140

Біг " 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 для власних потреб. Ми можемо підправити їх, але зміна неправильної речі може порушити їх код. Ось чому ми встановлюємо з джерела або використовуємо щось інше для встановлення, де ми можемо сміливо його налаштувати.
Олов'яний чоловік

Відповіді:


146

На відміну від усіх інших публікацій, я пропоную НЕ використовувати sudoпри встановленні дорогоцінних каменів.

Натомість я рекомендую встановити RVM і почати щасливе життя з портативними будинками дорогоцінних каменів та різною версією Ruby, які живуть під одним дахом.

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

RVM - це інструмент командного рядка, який дозволяє нам легко встановлювати, керувати та працювати з декількома середовищами рубіну та набором дорогоцінних каменів.

Причина, через яку встановити дорогоцінні камені sudoгірше, ніж просто, gem installце те, що вона встановлює дорогоцінні камені для ВСІХ КОРИСТУвачів як root. Це може бути добре, якщо ви єдина людина, яка користується машиною, але якщо ви цього не зробите, це може викликати дивацтво.

Якщо ви вирішите ви хочете підірвати всі дорогоцінні камені і почати заново, це зробити набагато простіше і безпечніше, як це некористувач.

Якщо ви вирішите ви хочете використовувати, RVMто використання sudoвикликає всілякі дивацтва, оскільки кожна версія Ruby, яку ви встановлюєте, RVMмає свій GEM_HOME.

Крім того, приємно, якщо ви можете зробити своє середовище розробки максимально наближеним до виробничого середовища, а у виробництві ви, швидше за все, встановите дорогоцінні камені як некористувальницького користувача.


12
+1 для rvm пропонують, але -1 за заплутане засудження альтернативної можливості просто використовувати sudo
tfwright

10
Гаразд, але всі ваші причини зводяться до "тому що RVM настільки великий", а не тому, що використання судо особливо шкідливо. Єдиний раз, коли ви цього не хочете, - це ситуація, коли ви перебуваєте на спільному комп'ютері. Якщо ви хочете порекомендувати rvm, просто зробіть це. Не потрібно вдаватися до FUDD.
tfwright

6
Я намагаюся не поширювати FUD, і я намагався наводити причини, які не є RVM, прошу вибачення, якщо це здається саме таким.
jonnii

9
RVM - хороший варіант. Але вам слід спробувати кращий, RBENV. Він менш нав'язливий, ніж RVM.
Андрес

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

128

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


23
+1 для цього параметра, а не рішення "Ще один інструмент конфігурації", RBENV / RVM.
jjpe

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

Я абсолютно в захваті від тієї першої команди. Я намагався встановити дорогоцінні камені і у мене виникли проблеми, тому що у мене немає привілеїв судо. Ця команда спрацювала !!!!
Caleb Kleveter

34

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

gem: --user-install

13

У випадку, якщо ви

  • встановлені рубінові дорогоцінні камені з судо
  • хочуть встановити дорогоцінні камені без судо
  • не хочу встановлювати 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 Devs, це набагато простіше, ніж використовувати rvm. Мені дуже не важливо мати різні рубінові версії, я просто хочу запустити деякі програми оболонки, що поширюються у вигляді самоцвітів. Дякую!
Кевін Гімбель

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

Ви можете встановити дорогоцінні камені у певну папку (наприклад, постачальник /) у додатку Rails, використовуючи:

bundle install --path vendor

Це. У наші дні єдиною програмою, якій потрібен sudo для встановлення програмного забезпечення, є ваш менеджер пакунків.
tjbp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.