У вас немає дозволів на запис для каталогу /var/lib/gems/2.3.0


104

На моєму ubuntu 16.04 встановлений рубін.

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /var/lib/gems/2.3.0 directory.

Будь-яка допомога буде дуже вдячна!


Ви можете спробувати встановити RVM та встановити новішу версію рубіну на зразок 2.3.3
Антон Сковородько

Для коментаря 3: пакет "python-software-властивості" недоступний, ви повинні замінити на спільні програми-властивості
Francisco Pedraza

1
Варіант RVM, а ще краще і проста установка як чистий "встановлення користувача" (на відміну від глобальної, вимагає прав), може бути набагато кращою справою, ніж повозитися з правами!
Френк Нокк

8
Я хотів би, щоб цей потік пояснив, чому ця ОП мала цю проблему, і чому вони повинні відмовитися від версії Ruby на користь і Ruby, і менеджера кількох установок (RVM або RBEVN). Я не можу точно сказати, чи базується тут рада виключно на особистих уподобаннях. Я сподіваюся, що за цією порадою є більше.
BaldEagle

Відповіді:


153

Спочатку потрібно видалити рубін, встановлений Ubuntu, чимось подібним sudo apt-get remove ruby.

Потім перевстановіть ruby ​​за допомогою rbenv та ruby-build відповідно до своїх документів:

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

Останній крок - встановити Bundler:

gem install bundler
rbenv rehash

Тоді насолоджуйтесь!

Дерек


8
Інструкція, як встановити рубін (на рейках), тут gorails.com/setup/ubuntu/16.04
Анджей Реманн

5
Я дещо схильний робити видалення, оскільки він також вимагає видалення залежних програм ( vim-gnomeнаприклад). Я думаю, я хотів би знати, чому в першу чергу це потрібно записати /var/lib/...для встановлення користувача ... Чи робив я це, sudo gem installколи не потрібно?
ПлазмаBinturong

4
Я погоджуюсь з @AntonSkovorodko, було б добре, якби відповідь могла виправдати видалення Рубі
блонгу

4
Будьте обережні, видаляючи Ruby в середовищі Cinnamon (траплялося в Linux Mint 18.2), після перезавантаження я не зміг запустити систему у графічному режимі. Коли це трапиться з вами, перейдіть до CLI через Ctrl+Alt+F1та запустіть наступні команди (видаліть та встановіть Cinnamon знову): sudo apt purge cinnamon && sudo apt install cinnamon
Kout

2
Оскільки ця відповідь старіє, ви, ймовірно, захочете дізнатися, які останні доступні: rbenv install -lдля переліку всіх доступних версій, а потім rbenv install 2.5.1для версії 2.5.1 або будь-якого іншого.
Пол Штурм

60

Якщо ви хочете використовувати дистрибутив Ruby замість rb-env / rvm, ви можете налаштувати a GEM_HOMEдля вашого поточного користувача. Почніть зі створення каталогу для зберігання дорогоцінних каменів Ruby для свого користувача:

$ mkdir ~/.ruby

Потім оновіть свою оболонку, щоб використовувати цей каталог для GEM_HOMEта оновити PATHзмінну, щоб включити каталог Ruby gem bin.

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(Цей останній рядок перезавантажить змінні середовища у вашій поточній оболонці.)

Тепер ви повинні мати змогу встановити Ruby gems під свого користувача за допомогою gemкоманди. Мені вдалося налагодити цю роботу з Ruby 2.5.1 під Ubuntu 18.04. Якщо ви використовуєте оболонку, яка не є Bash, вам потрібно буде відредагувати сценарій запуску для цієї оболонки замість bashrc.


2
Я зробив це, потім отримав помилку про "не вдається знайти файли заголовка для ruby", потім я прочитав це: stackoverflow.com/a/4502672/2245874 , і не дотримувався всього цього, але зробив sudo apt встановити ruby -gems, і тоді це працювало на мене.
robm

1
Я вважаю, що @robm означав ruby-dev, а не ruby-
gems

3
Це, мабуть, більше підходить для користувачів рубіну, яким не потрібно розроблятись у кількох версіях.
danielcooperxyz

1
Ви описали дійсно хороший спосіб Linux виправити мою рубінову установку без додаткових інструментів, просто добрий старий баш :)
Денис Трофімов,

30

(Січень 2019 р.) Щоб встановити Ruby за допомогою сценарію Rbenv, виконайте наступні дії:

1. Спочатку оновіть індекс пакунків та встановіть пакети, необхідні для інструменту збирання ruby ​​для збирання Ruby з джерела:

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2. Далі запустіть таку команду curl, щоб встановити rbenv та ruby-build:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3. Додайте $ HOME / .rbenv / bin до системи PATH.

Якщо ви використовуєте Bash, запустіть:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Якщо ви використовуєте Zsh run:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4. Встановіть останню стабільну версію Ruby та встановіть її як версію за замовчуванням за допомогою:

rbenv install 2.5.1
rbenv global 2.5.1

Щоб перелічити всі доступні версії Ruby, якими ви можете скористатися: rbenv install -l

5. Перевірте правильність встановлення Ruby, роздрукувавши номер версії:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

ДЖЕРЕЛ: Як встановити Ruby на Ubuntu 18.04

EDIT: Встановлення рубігем:

sudo apt-get install rubygems

2
це чудово! приємно і лаконічно. Я точно дотримувався його (за винятком .zshrcзмін, які я зробив вручну), і це працювало чудово. Точно так само, як ви додали спосіб встановлення rubygems, я б запропонував, можливо, додати, як пізніше оновити встановлену версію рубіну (я думаю, ви просто запускаєте команди rbenv installта rbenv globalкоманди знову і, можливо, rbenv uninstall
підрізаєте

1
Це дивно! Відмінно працює на Ubuntu 18.04 WSL.
robe007

1
Це більш елегантна відповідь.
rahedcs

14

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

Я скоріше просто розширюю права цієї конкретної папки на ... ну, всі:

cd /var/lib
sudo chmod -R a+w gems/

(Я також зіткнувся з вашою помилкою. Тому це досить перевірено.)


1
Мені також потрібно було звертатися до папки / usr / local / bin, але це рішення спрацювало: "ПОМИЛКА: Під час виконання gem ... (Gem :: FilePermissionError) У вас немає дозволів на запис для / usr / local / bin каталогу . "
eb80

10

Спробуйте скористатися chown -Rв var/lib/gemsкаталозі, призначивши rubyusernameу цьому прикладі право власності користувачеві [ ], користувачеві, який буде встановлювати та розробляти з дорогоцінними каменями.

 # chown -R rubyusername:rubyusername /var/lib/gems 

Це рекурсивно змінює все в каталозі дорогоцінних каменів . Для додаткової безпеки в багатокористувацьких системах ви також можете створити групу, а не придушувати окреме ім'я rubyusername та додавати користувачів до цієї групи.


2
Це може вирішити цю проблему, але з’являється інша проблема: ПОМИЛКА: Під час виконання gem ... (Gem :: FilePermissionError) У вас немає дозволів на запис для / usr / local / bin каталогу; тож я здогадуюсь, що щось не так замість дозволу.
дерек

3

Спираючись на відповідь Дерека вище, зазвичай не рекомендується використовувати системний екземпляр, що надається Ruby, для вашої власної роботи по розробці, оскільки системні інструменти можуть залежати від конкретної версії або місця установки Ruby. Подібно до цієї відповіді для Mac OSX , ви хочете дотримуватися інструкцій derek щодо використання чогось типу rbenv ( RVM - аналогічна альтернатива) для встановлення власного екземпляра Ruby.

Однак не потрібно видаляти системну версію Ruby, інструкції з установки rbenv забезпечують механізм переконання, що екземпляр Ruby, наявний у вашій оболонці, є екземпляром rbenv, а не системним екземпляром. Це

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

рядок у відповіді Дерека.


2

Я зіткнувся з такою ж помилкою в GitHub Actions. Додавання sudoвирішило проблему.

sudo gem install bundler

0

Перевстановлення Компаса працювало на мене .. Це магія!

sudo gem install -n /usr/local/bin compass

0

Ubuntu 20.04:

Варіант 1 - налаштуйте каталог встановлення дорогоцінного каміння для вашого облікового запису користувача

Для bash (для zsh, ми б .zshrcзвичайно використовували )

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Варіант 2 - використовувати оснащення

Видаліть apt-версію ( ruby-full) та перевстановіть їїsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.