Anda tidak memiliki izin menulis untuk direktori /var/lib/gems/2.3.0

104

Saya telah menginstal ruby ​​di ubuntu 16.04 saya.

$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.

Bantuan apa pun akan sangat dihargai!

derek
sumber
Anda dapat mencoba menginstal RVM dan menginstal versi ruby ​​yang lebih baru seperti 2.3.3
Anton Skovorodko
Untuk komentar 3: paket "python-software-properties" tidak tersedia, Anda harus mengganti untuk software-properties-common
Francisco Pedraza
1
Opsi RVM, dan bahkan lebih baik & mudah menginstal sebagai "instalasi pengguna" murni (sebagai lawan dari global, yang menuntut hak) mungkin merupakan hal yang jauh lebih baik, daripada mengutak-atik hak!
Frank Nocke
8
Saya berharap aliran ini menjelaskan mengapa OP ini memiliki masalah ini dan mengapa mereka harus meninggalkan versi Ruby untuk mendukung Ruby dan manajer instalasi ganda (RVM atau RBEVN). Saya tidak dapat memastikan dengan pasti apakah saran di sini hanya didasarkan pada preferensi pribadi. Saya harap ada lebih banyak di balik nasihat ini.
BaldEagle

Jawaban:

153

Pertama-tama Anda harus menghapus ruby ​​yang diinstal oleh Ubuntu dengan sesuatu seperti sudo apt-get remove ruby.

Kemudian instal ulang ruby ​​menggunakan rbenv dan ruby-build sesuai dengan dokumen mereka:

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

Langkah terakhir adalah menginstal Bundler:

gem install bundler
rbenv rehash

Kemudian nikmatilah!

Derek

derek
sumber
8
Instruksi cara menginstal ruby ​​(di rel) ada di sini gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Saya agak segan untuk melakukan uninstall, karena ini membutuhkan uninstall program-program dependen juga ( vim-gnomemisalnya). Saya kira saya lebih suka mengetahui mengapa di tempat pertama itu perlu menulis /var/lib/...untuk instalasi pengguna ... Apakah saya melakukannya sudo gem installketika tidak diperlukan?
PlasmaBinturong
4
Saya setuju dengan @AntonSkovorodko, alangkah baiknya jika jawabannya dapat membenarkan penghapusan Ruby
blong
4
Berhati-hatilah saat menghapus Ruby di lingkungan Cinnamon (terjadi di Linux Mint 18.2), setelah reboot saya tidak dapat menjalankan sistem dalam mode grafis. Jika ini terjadi pada Anda, buka CLI melalui Ctrl+Alt+F1dan jalankan perintah berikut (uninstal dan instal Cinnamon lagi): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
Seiring bertambahnya usia jawaban ini, Anda mungkin ingin tahu apa yang terbaru tersedia: rbenv install -luntuk daftar semua versi yang tersedia lalu rbenv install 2.5.1untuk versi 2.5.1 atau apa pun yang Anda inginkan.
Paul Sturm
60

Jika Anda ingin menggunakan Ruby distribusi daripada rb-env / rvm, Anda dapat mengatur a GEM_HOMEuntuk pengguna Anda saat ini. Mulailah dengan membuat direktori untuk menyimpan permata Ruby untuk pengguna Anda :

$ mkdir ~/.ruby

Kemudian perbarui shell Anda untuk menggunakan direktori itu GEM_HOMEdan untuk memperbarui PATHvariabel Anda agar menyertakan direktori bin permata Ruby.

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

(Baris terakhir itu akan memuat ulang variabel lingkungan di shell Anda saat ini.)

Sekarang Anda harus dapat menginstal permata Ruby di bawah pengguna Anda menggunakan gemperintah. Saya bisa membuatnya berfungsi dengan Ruby 2.5.1 di bawah Ubuntu 18.04. Jika Anda menggunakan shell yang bukan Bash, Anda perlu mengedit skrip startup untuk shell tersebut, bukan bashrc.

James
sumber
2
Saya melakukan ini, kemudian mendapat kesalahan tentang "tidak dapat menemukan file header untuk ruby", lalu saya membaca ini: stackoverflow.com/a/4502672/2245874 , dan tidak mengikuti semuanya tetapi melakukan sudo apt menginstal ruby -gems, dan kemudian berhasil untukku.
robm
1
Saya percaya @robm berarti ruby-dev bukan ruby-gems
Altreus
3
Ini mungkin lebih sesuai untuk pengguna ruby ​​yang tidak perlu mengembangkan terhadap beberapa versi.
danielcooperxyz
1
Anda menjelaskan cara Linux yang sangat bagus untuk memperbaiki pemasangan ruby ​​saya tanpa alat tambahan, hanya pesta lama yang bagus :)
Denis Trofimov
30

(Januari 2019) Untuk menginstal Ruby menggunakan skrip Rbenv, ikuti langkah-langkah berikut:

1. Pertama, perbarui indeks paket dan instal paket yang diperlukan untuk alat ruby-build untuk membangun Ruby dari sumber:

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. Selanjutnya, jalankan perintah curl berikut untuk menginstal rbenv dan ruby-build:

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

3. Tambahkan $ HOME / .rbenv / bin ke PATH sistem.

Jika Anda menggunakan Bash, jalankan:

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

Jika Anda menggunakan Zsh run:

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

4. Instal Ruby versi stabil terbaru dan setel sebagai versi default dengan:

rbenv install 2.5.1
rbenv global 2.5.1

Untuk mendaftar semua versi Ruby yang tersedia, Anda dapat menggunakan: rbenv install -l

5. Pastikan Ruby telah diinstal dengan benar dengan mencetak nomor versi:

ruby -v

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

SUMBER: Cara Menginstal Ruby di Ubuntu 18.04

EDIT: Instal rubygems:

sudo apt-get install rubygems
Achraf JEDAY
sumber
2
ini bagus! bagus dan ringkas. Saya mengikutinya dengan tepat (kecuali .zshrcperubahan yang saya lakukan dengan tangan) dan itu bekerja dengan sempurna. Dengan cara yang sama Anda menambahkan cara menginstal rubygems, saya sarankan mungkin menambahkan bagaimana kemudian memperbarui versi ruby yang diinstal (aku kira kamu hanya menjalankan rbenv installdan rbenv globalperintah lagi dan mungkin rbenv uninstalluntuk memangkas versi usang)
gMale
1
Ini luar biasa! Bekerja dengan sempurna di Ubuntu 18.04 WSL.
robe007
1
Ini jawaban yang lebih elegan.
ruam
14

Daripada mengganti pemilik, yang mungkin mengunci pengguna lokal lain, atau –suatu hari– server ruby ​​Anda / hal-hal penerapan ... berjalan di bawah pengguna yang berbeda ...

Saya lebih suka memperluas hak folder tertentu itu ke ... yah, semua orang:

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

(Saya juga mengalami kesalahan Anda. Jadi ini sudah diverifikasi dengan adil.)

Frank Nocke
sumber
1
Saya juga perlu mengalamatkan folder / usr / local / bin, tetapi solusi ini berhasil: "ERROR: Saat menjalankan gem ... (Gem :: FilePermissionError) Anda tidak memiliki izin menulis untuk direktori / usr / local / bin . "
eb80
10

Coba gunakan chown -Rdi var/lib/gemsdirektori, tetapkan kepemilikan kepada pengguna [ rubyusername] dalam contoh ini, pengguna yang akan menginstal dan mengembangkan dengan permata.

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

Ini secara rekursif mengubah semua yang ada di bawah direktori permata . Untuk keamanan ekstra pada sistem multi-pengguna, Anda juga dapat membuat grup, daripada menggunakan nama pengguna rubi individual, dan menambahkan pengguna ke grup itu.

ikan kecil
sumber
2
Ini dapat memecahkan masalah itu, tetapi masalah lain muncul: ERROR: Saat menjalankan gem ... (Gem :: FilePermissionError) Anda tidak memiliki izin menulis untuk direktori / usr / local / bin; jadi saya kira ada sesuatu yang salah daripada izinnya.
derek
3

Berdasarkan jawaban derek di atas, umumnya tidak disarankan untuk menggunakan instance Ruby yang disediakan sistem untuk pekerjaan pengembangan Anda sendiri, karena alat sistem mungkin bergantung pada versi atau lokasi tertentu dari instalasi Ruby. Mirip dengan jawaban untuk Mac OSX ini , Anda akan ingin mengikuti petunjuk derek tentang menggunakan sesuatu seperti rbenv ( RVM adalah alternatif serupa) untuk menginstal instance Ruby Anda sendiri.

Namun, tidak perlu menghapus versi sistem Ruby, petunjuk penginstalan rbenv menyediakan mekanisme untuk memastikan bahwa instance Ruby yang tersedia di shell Anda adalah instance rbenv, bukan instance sistem. Ini adalah

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

baris dalam jawaban derek.

Sean Ray
sumber
2

Saya mengalami kesalahan yang sama di GitHub Actions. Menambahkan sudomemecahkan masalah.

sudo gem install bundler
Kolappan N
sumber
0

Memasang ulang Kompas berhasil untuk saya .. Ini ajaib!

sudo gem install -n /usr/local/bin compass
Haje
sumber
0

Ubuntu 20.04:

Opsi 1 - siapkan direktori instalasi permata untuk akun pengguna Anda

Untuk bash (untuk zsh, .zshrctentu saja kami akan menggunakan )

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

Opsi 2 - gunakan snap

Copot ruby-fullpemasangan apt-version ( ) dan pasang kembali dengansnap

sudo apt-get remove ruby
sudo snap install ruby --classic
schnatterer
sumber