У вас нет прав на запись в каталог /var/lib/gems/2.3.0

106

На моем Ubuntu 16.04 установлен Ruby.

$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 и установить более новую версию ruby, например 2.3.3
Антон Сковородко
Для комментария 3: пакет «python-software-properties» недоступен, вы должны заменить его на software-properties-common
Франсиско Педраса
1
Вариант RVM и, по-моему, даже лучшая и простая установка в виде чистой «пользовательской установки» (в отличие от глобальной, требующей прав) может быть намного лучше, чем возиться с правами!
Фрэнк
8
Я бы хотел, чтобы этот поток объяснил, почему у этого OP возникла эта проблема и почему они должны отказаться от версии Ruby в пользу Ruby и множественного диспетчера установки (RVM или RBEVN). Я не могу сказать наверняка, основан ли здесь совет исключительно на личных предпочтениях. Я надеюсь, что за этим советом стоит нечто большее.
BaldEagle

Ответы:

156

Сначала вам нужно удалить ruby, установленный 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

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

Дерек

Дерек
источник
9
Инструкция по установке ruby ​​(на рельсы) находится здесь gorails.com/setup/ubuntu/16.04
Анджей Рехманн,
5
Я как бы сдержан в отношении удаления, поскольку для этого также требуется удаление зависимых программ ( vim-gnomeнапример). Думаю, я бы предпочел знать, почему в первую очередь нужно писать /var/lib/...для установки пользователя ... Я делал, sudo gem installкогда не нужно?
PlasmaBinturong
4
Я согласен с @AntonSkovorodko, было бы хорошо , если ответ может оправдать деинсталляцию Руби
Blong
4
Просто будьте осторожны при удалении Ruby в среде Cinnamon (произошло в Linux Mint 18.2), после перезагрузки я не смог запустить систему в графическом режиме. Когда это произойдет с вами, перейдите в интерфейс командной строки 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 или того, что вам нужно.
Paul Sturm
65

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

$ mkdir ~/.ruby

Затем обновите свою оболочку, чтобы использовать этот каталог для GEM_HOMEи обновить вашу PATHпеременную, включив в нее каталог bin gem Ruby.

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

(Эта последняя строка перезагрузит переменные среды в вашей текущей оболочке.)

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

Джеймс
источник
2
Я сделал это, затем получил сообщение об ошибке «не могу найти файлы заголовков для рубина», затем я прочитал это: stackoverflow.com/a/4502672/2245874 , и не следил за всем этим, но сделал sudo apt install ruby -gems, и тогда у меня это сработало.
Робм
1
Я считаю, что @robm имел в виду ruby-dev, а не ruby-gems
Altreus
3
Это, вероятно, больше подходит для пользователей Ruby, которым не нужно разрабатывать несколько версий.
danielcooperxyz
1
Вы описали действительно хороший способ для Linux исправить мою установку ruby ​​без каких-либо дополнительных инструментов, просто старый добрый bash :)
Денис Трофимов,
31

(Январь 2019 г.) Чтобы установить Ruby с помощью сценария Rbenv, выполните следующие действия:

1. Сначала обновите индекс пакетов и установите пакеты, необходимые инструменту ruby-build для сборки 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, запустите:

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

РЕДАКТИРОВАТЬ: установить rubygems:

sudo apt-get install rubygems
Ахраф ДЖЕДЕЙ
источник
2
это круто! красиво и лаконично. Я точно следил за ним (за исключением .zshrcизменений, которые я делал вручную), и он работал отлично. Таким же образом вы добавили , как установить rubygems, я предложил бы , возможно , добавление , как впоследствии обновить установленную версию Ruby (я предполагаю , что вы просто запустить rbenv installи rbenv globalкоманды снова и , возможно , rbenv uninstallподрезать устаревшие версии)
gMale
1
Это потрясающе! Отлично работает на Ubuntu 18.04 WSL.
robe007
1
Это более элегантный ответ.
rashedcs
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 

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

пескарь
источник
2
Это может решить эту проблему, но появляется другая проблема: ОШИБКА: при выполнении gem ... (Gem :: FilePermissionError) У вас нет прав на запись для каталога / usr / local / bin; поэтому я предполагаю, что вместо разрешения что-то не так.
derek
3

Основываясь на ответе Дерека выше, обычно не рекомендуется использовать предоставленный системой экземпляр Ruby для вашей собственной разработки, поскольку системные инструменты могут зависеть от конкретной версии или места установки Ruby. Подобно этому ответу для Mac OSX , вы захотите следовать инструкциям Дерека по использованию чего-то вроде 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
Haje
источник
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-version ( ruby-full) и переустановите с помощьюsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
шнаттерер
источник