Bạn không có quyền ghi cho thư mục /var/lib/gems/2.3.0


104

Tôi đã cài đặt ruby ​​trên ubuntu 16.04 của mình.

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

Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào!


Bạn có thể thử cài đặt RVM và cài đặt một phiên bản mới hơn của ruby như 2.3.3
Anton Skovorodko

Đối với bình luận 3: gói "python-phần mềm-tính" là không có sẵn, bạn nên thay thế cho phần mềm tính-chung
Francisco Pedraza

1
Tùy chọn RVM và imho thậm chí còn tốt hơn và cài đặt đơn giản như một “người dùng cài đặt” thuần túy (trái ngược với tùy chọn toàn cầu, yêu cầu quyền) có thể là một điều tốt hơn nhiều so với việc mày mò các quyền!
Frank Nocke

8
Tôi ước gì luồng này giải thích lý do tại sao OP này gặp sự cố này và tại sao họ nên từ bỏ một phiên bản Ruby để thay thế cho cả Ruby và trình quản lý cài đặt nhiều (RVM hoặc RBEVN). Tôi không thể biết chắc liệu lời khuyên ở đây có phải chỉ dựa trên sở thích cá nhân hay không. Tôi hy vọng có nhiều điều đằng sau lời khuyên này.
BaldEagle,

Câu trả lời:


152

Trước tiên, bạn cần gỡ cài đặt ruby ​​được cài đặt bởi Ubuntu bằng một cái gì đó như sudo apt-get remove ruby.

Sau đó cài đặt lại ruby ​​bằng rbenvruby-build theo tài liệu của họ:

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

Bước cuối cùng là cài đặt Bundler:

gem install bundler
rbenv rehash

Sau đó hãy tận hưởng!

Derek


8
Hướng dẫn cách cài đặt ruby (trên đường ray) là ở đây gorails.com/setup/ubuntu/16.04
Andrzej REHMANN

5
Tôi khá cẩn thận để thực hiện gỡ cài đặt, vì nó cũng yêu cầu gỡ cài đặt các chương trình phụ thuộc ( vim-gnomeví dụ). Tôi đoán tôi muốn biết tại sao ngay từ đầu nó cần phải ghi vào /var/lib/...để người dùng cài đặt ... Tôi đã làm một sudo gem installkhi không cần thiết?
PlasmaBinturong

4
Tôi đồng ý với @AntonSkovorodko, sẽ rất tuyệt nếu câu trả lời có thể biện minh cho việc gỡ cài đặt Ruby
blong

4
Chỉ cần cẩn thận khi gỡ cài đặt Ruby trong môi trường Cinnamon (xảy ra trong Linux Mint 18.2), sau khi khởi động lại, tôi không thể chạy hệ thống ở chế độ đồ họa. Khi điều này xảy ra với bạn, hãy truy cập CLI qua Ctrl+Alt+F1và chạy các lệnh sau (gỡ cài đặt và cài đặt lại Cinnamon): sudo apt purge cinnamon && sudo apt install cinnamon
Kout

2
E: Package 'python-software-properties' has no installation candidate
Aaron Franke

60

Nếu bạn muốn sử dụng bản phân phối Ruby thay vì rb-env / rvm, bạn có thể thiết lập một GEM_HOMEcho người dùng hiện tại của mình. Bắt đầu bằng cách tạo một thư mục để lưu trữ các viên ngọc Ruby cho người dùng của bạn :

$ mkdir ~/.ruby

Sau đó, cập nhật trình bao của bạn để sử dụng thư mục đó GEM_HOMEvà cập nhật PATHbiến của bạn để bao gồm thư mục bin Ruby gem.

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

(Dòng cuối cùng đó sẽ tải lại các biến môi trường trong trình bao hiện tại của bạn.)

Bây giờ bạn sẽ có thể cài đặt các viên ngọc Ruby dưới quyền người dùng của mình bằng gemlệnh. Tôi đã có thể làm cho điều này hoạt động với Ruby 2.5.1 trong Ubuntu 18.04. Nếu bạn đang sử dụng một trình bao không phải là Bash, thì bạn sẽ cần phải chỉnh sửa tập lệnh khởi động cho trình bao đó thay vì bashrc.


2
Tôi đã làm điều này, sau đó gặp lỗi "không thể tìm thấy tệp tiêu đề cho ruby", sau đó tôi đọc được: stackoverflow.com/a/4502672/2245874 và không làm theo tất cả nhưng đã thực hiện sudo apt cài đặt ruby -gems, và sau đó nó hoạt động với tôi.
robm

1
Tôi tin rằng @robm có nghĩa là ruby-dev không phải ruby-gems
Altreus

3
Điều này có lẽ thích hợp hơn cho người dùng ruby ​​không cần phát triển với nhiều phiên bản.
danielcooperxyz

1
Bạn đã giới thiệu một cách thực sự tốt cho Linux để sửa lỗi cài đặt ruby ​​của tôi mà không cần bất kỳ công cụ bổ sung nào, chỉ là một bash cũ tốt :)
Denis Trofimov

29

(Tháng 1 năm 2019) Để cài đặt Ruby bằng tập lệnh Rbenv, hãy làm theo các bước sau:

1. Đầu tiên, cập nhật chỉ mục gói và cài đặt các gói cần thiết cho công cụ ruby-build để xây dựng Ruby từ nguồn:

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. Tiếp theo, chạy lệnh curl sau để cài đặt cả rbenv và ruby-build:

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

3. Thêm $ HOME / .rbenv / bin vào hệ thống PATH.

Nếu bạn đang sử dụng Bash, hãy chạy:

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

Nếu bạn đang sử dụng Zsh run:

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

4. Cài đặt phiên bản ổn định mới nhất của Ruby và đặt nó làm phiên bản mặc định với:

rbenv install 2.5.1
rbenv global 2.5.1

Để liệt kê tất cả các phiên bản Ruby hiện có, bạn có thể sử dụng: rbenv install -l

5. Xác minh rằng Ruby đã được cài đặt đúng cách bằng cách in ra số phiên bản:

ruby -v

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

NGUỒN: Cách cài đặt Ruby trên Ubuntu 18.04

CHỈNH SỬA: Cài đặt rubygem:

sudo apt-get install rubygems

2
điều đó thật tuyệt! hay và ngắn gọn. Tôi đã làm theo chính xác (ngoại trừ những .zshrcthay đổi mà tôi đã làm bằng tay) và nó hoạt động hoàn hảo. Trong cùng một cách bạn thêm cách cài đặt rubygems, tôi muốn đề nghị có thể thêm làm thế nào để sau đó cập nhật các phiên bản ruby cài đặt (Tôi đoán bạn chỉ cần chạy rbenv installrbenv globallệnh một lần nữa và có lẽ rbenv uninstallđể prune phiên bản cũ)
gMale

1
Thật đáng kinh ngạc! Hoạt động hoàn hảo trên Ubuntu 18.04 WSL.
robe007

1
Đây là câu trả lời thanh lịch hơn.
rashedcs

14

Thay vì thay đổi chủ sở hữu, điều này có thể khóa những người dùng cục bộ khác hoặc – một ngày nào đó– máy chủ ruby ​​của riêng bạn / triển khai-những thứ ... đang chạy dưới một người dùng khác ...

Tôi chỉ đơn giản là mở rộng quyền của thư mục cụ thể đó cho ... tốt, tất cả mọi người:

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

(Tôi cũng gặp phải lỗi của bạn. Vì vậy, điều này đã được xác minh khá rõ ràng.)


1
Tôi cũng cần địa chỉ thư mục / usr / local / bin, nhưng giải pháp này đã hoạt động: "LỖI: Trong khi thực thi gem ... (Gem :: FilePermissionError) Bạn không có quyền ghi cho thư mục / usr / local / bin . "
eb80,

10

Hãy thử sử dụng chown -Rtrên var/lib/gemsthư mục, gán quyền sở hữu cho người dùng [ rubyusername] trong ví dụ này, người dùng sẽ cài đặt và phát triển với đá quý.

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

Điều này sẽ thay đổi một cách đệ quy mọi thứ trong thư mục gems . Để tăng cường bảo mật trên các hệ thống nhiều người dùng, bạn cũng có thể tạo một nhóm, thay vì chọn rubyusername riêng lẻ và thêm người dùng vào nhóm đó.


2
Nó có thể giải quyết vấn đề đó, nhưng một vấn đề khác lại xuất hiện: LỖI: Trong khi thực thi gem ... (Gem :: FilePermissionError) Bạn không có quyền ghi cho thư mục / usr / local / bin; vì vậy tôi đoán có điều gì đó sai khác thay vì sự cho phép.
derek

3

Dựa trên câu trả lời của derek ở trên, nói chung không nên sử dụng hệ thống được cung cấp phiên bản Ruby cho công việc phát triển của riêng bạn, vì các công cụ hệ thống có thể phụ thuộc vào phiên bản hoặc vị trí cụ thể của cài đặt Ruby. Tương tự như câu trả lời này cho Mac OSX , bạn sẽ muốn làm theo hướng dẫn của derek về cách sử dụng một thứ như rbenv ( RVM là một giải pháp thay thế tương tự) để cài đặt phiên bản Ruby của riêng bạn.

Tuy nhiên, không cần gỡ cài đặt phiên bản hệ thống của Ruby, hướng dẫn cài đặt rbenv cung cấp cơ chế để đảm bảo rằng phiên bản Ruby có sẵn trong trình bao của bạn là phiên bản rbenv, không phải phiên bản hệ thống. Đây là

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

dòng trong câu trả lời của derek.


2

Tôi gặp phải lỗi tương tự trong GitHub Actions. Thêm đã sudogiải quyết vấn đề.

sudo gem install bundler

0

Cài đặt lại La bàn đã làm việc cho tôi .. Đó là một phép thuật!

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

0

Ubuntu 20.04:

Tùy chọn 1 - thiết lập thư mục cài đặt đá quý cho tài khoản người dùng của bạn

Đối với bash (đối với zsh, .zshrctất nhiên chúng tôi sẽ sử dụng )

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

Tùy chọn 2 - sử dụng snap

Gỡ cài đặt phiên bản apt ( ruby-full) và cài đặt lại bằngsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.