'sudo gem install' hoặc 'gem install' và các vị trí đá quý


140

Chạy ' sudo gem list --local' và ' gem list --local' cho tôi kết quả khác nhau. Đường dẫn đá quý của tôi được đặt vào thư mục nhà của tôi và chỉ chứa các viên đá quý từ ' gem list --local'.

Có lẽ không tốt khi cài đặt đá quý trong các thư mục khác nhau trên máy tính của tôi, vậy tôi có nên đặt đường dẫn đá quý khác nhau không và tôi có nên luôn sử dụng sudokhi cài đặt thứ gì không?

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 trống.


1
Tôi nghĩ rằng đây là một câu hỏi hợp lệ cho những người trong chúng ta phải sử dụng đá quý yêu cầu quyền root.
Kelly

Liên quan: stackoverflow.com/questions/21141584/ săn . Tôi sử dụng rbenv để quản lý các phiên bản Ruby và gặp sự cố vì tôi đã sử dụng sudo gem install railsthay vì gem install rails.
Dennis

3
"Tôi nghĩ rằng đây là một câu hỏi hợp lệ cho những người trong chúng ta phải sử dụng một loại đá quý yêu cầu quyền root." Tôi nghĩ rằng bất kỳ đá quý nào cần đặc quyền root, hoặc được cài đặt hoặc để chạy, đều rất đáng ngờ. Đá quý sẽ có thể chạy trong hộp cát và chạy với sự cho phép của người dùng.
Tin Man

1
sudolà một khẩu súng nạp chỉ về phía chân của bạn. Sử dụng nó mà không hiểu những gì nó làm và làm thế nào nó có thể ảnh hưởng đến hệ thống của bạn giống như bóp cò khi nhắm mắt. Bạn có thể bắn một lỗ vào chân, bạn có thể không, nhưng dù bằng cách nào bạn cũng không muốn gặp rủi ro trừ khi bạn biết cách hoàn tác thiệt hại. Sử dụng sudoghi vào Ruby thuộc sở hữu hệ thống, trên Mac OS, được Apple cài đặt cho mục đích sử dụng riêng của họ. Chúng ta có thể cõng nó, nhưng thay đổi điều sai có thể phá vỡ mã của họ. Đó là lý do tại sao chúng tôi cài đặt từ nguồn hoặc sử dụng một cái gì đó khác để cài đặt nơi chúng tôi có thể tinh chỉnh nó một cách an toàn.
Tin Man

Câu trả lời:


146

Trái với tất cả các bài viết khác tôi đề nghị KHÔNG sử dụng sudokhi cài đặt đá quý.

Thay vào đó, tôi khuyên bạn nên cài đặt RVM và bắt đầu một cuộc sống hạnh phúc với những ngôi nhà đá quý di động và phiên bản khác nhau của Ruby đều sống dưới một mái nhà.

Đối với người không chuyên, từ tài liệu :

RVM là một công cụ dòng lệnh cho phép chúng ta dễ dàng cài đặt, quản lý và làm việc với nhiều môi trường ruby ​​và bộ đá quý.

Lý do tại sao cài đặt đá quý với sudotồi tệ hơn chỉ gem installlà vì nó cài đặt đá quý cho TẤT CẢ NGƯỜI SỬ DỤNG như root. Điều này có thể ổn nếu bạn là người duy nhất sử dụng máy, nhưng nếu bạn không làm điều đó có thể gây ra sự kỳ lạ.

Nếu bạn quyết định bạn muốn thổi bay tất cả các viên đá quý của mình và bắt đầu lại thì điều đó dễ dàng hơn và an toàn hơn, để làm như vậy với tư cách là người dùng không root.

Nếu bạn quyết định bạn muốn sử dụng RVMthì việc sử dụng sudosẽ gây ra tất cả các loại kỳ lạ bởi vì mỗi phiên bản Ruby bạn cài đặt RVMđều có GEM_HOME riêng.

Ngoài ra, thật tuyệt nếu bạn có thể làm cho môi trường phát triển của mình càng gần với môi trường sản xuất của bạn càng tốt, và trong sản xuất, rất có thể bạn sẽ cài đặt đá quý như một người dùng không root.


12
+1 cho đề xuất rvm, nhưng -1 cho sự lên án khó hiểu về khả năng thay thế của việc chỉ sử dụng sudo
tfwright

10
Ok, nhưng tất cả lý do của bạn làm sôi sục "vì RVM quá tuyệt vời" không phải vì sử dụng sudo đặc biệt có hại. Lần duy nhất bạn không muốn là trong tình huống cụ thể mà bạn đang sử dụng máy tính dùng chung. Nếu bạn muốn giới thiệu rvm chỉ cần làm điều đó. Không cần phải dùng đến FUDD.
tfwright

6
Tôi cố gắng không truyền bá FUD và tôi đã cố gắng đưa ra những lý do không phải RVM, tôi xin lỗi nếu có vẻ như vậy.
jonnii

9
RVM là một lựa chọn tốt. Nhưng bạn nên thử một thứ tốt hơn, RBENV. Nó ít xâm nhập hơn RVM.
Andres

4
@ HontváriJózsefLevente thật khó để giải quyết tất cả các câu hỏi của bạn trong một bình luận, nhưng thiếu sót là bạn muốn môi trường phát triển của mình gần nhất có thể với sản xuất. nếu bạn đang làm việc trên hai ứng dụng, một trong số đó sử dụng ruby ​​2.1 và ứng dụng khác là 1.9 thì bạn cần đảm bảo môi trường địa phương của bạn đang sử dụng đúng phiên bản. đó là những gì RVM hoặc RBENV làm cho bạn. Bạn sẽ sử dụng nó cho cùng một lý do bạn sẽ sử dụng bất kỳ môi trường hộp cát nào, nhưng lợi ích chính trong trường hợp này là sự cô lập. Tôi hi vọng cái này giúp được!
jonnii

128

Bạn cũng có thể cài đặt đá quý trong môi trường địa phương (không có sudo) với

gem install --user-install <gemname>

Tôi khuyên bạn không nên lộn xộn với cấu hình cấp hệ thống ngay cả khi đó là máy tính một người dùng.

Bạn có thể kiểm tra xem những viên đá quý đi đâu bằng cách nhìn vào gempaths gem environment. Trong trường hợp của tôi, đó là "~ / .gem / ruby ​​/ 1.8".

Nếu bạn cần một số nhị phân từ các bản cài đặt cục bộ được thêm vào đường dẫn của bạn, bạn có thể thêm một cái gì đó vào bashrc của mình như:

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

(từ http://guides.rubygems.org/faqs/#user-install )


23
+1 cho tùy chọn này thay vì các giải pháp "Công cụ cấu hình khác" ở trên, RBENV / RVM.
jjpe

Tôi đang tạo ra một viên đá quý và theo hướng dẫn sử dụng tôi phải làm rake installvà để sửa lỗi sudo isse, tôi đã phải vá bằng tay /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbthêm vào --user-installđó. Không thể tìm thấy giải pháp tốt hơn, vì có vẻ như rake installkhông chấp nhận các tham số bổ sung.
Nakilon

Tôi hoàn toàn hồi hộp với mệnh lệnh đầu tiên đó. Tôi đã cố gắng cài đặt đá quý và đã gặp sự cố vì tôi không có đặc quyền sudo. Lệnh đó đã có hiệu quả !!!!
Caleb Kleveter

34

Tốt hơn hết, hãy đặt --user-installtệp ~ / .gemrc của bạn để bạn không phải nhập nó mỗi lần

gem: --user-install

13

Trong trường hợp bạn

  • cài đặt đá quý ruby ​​với sudo
  • muốn cài đặt đá quý mà không cần sudo
  • không muốn cài đặt rvm / rbenv

thêm phần sau vào .bash_profile:

export GEM_HOME=/Users/your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

Mở một tab mới trong Terminal HOẶC source ~/.bash_profilebạn vẫn ổn!


8
Đối với ai đó không làm việc với Ruby, Rails, Rake và bất cứ điều gì khác thì Ruby Devs sử dụng / muốn sử dụng giải pháp NÀY dễ dàng hơn nhiều so với sử dụng rvm. Tôi thực sự không quan tâm đến việc có các phiên bản ruby ​​khác nhau. Tôi chỉ muốn chạy một số chương trình vỏ được phân phối dưới dạng đá quý. Cảm ơn bạn!
Kevin Gimbel

9

Liên quan (đối với người dùng gói), nếu bạn muốn một giải pháp thay thế nhẹ hơn cho RVM sẽ đưa mọi thứ vào một thư mục nổi tiếng dành riêng cho người dùng, tôi khuyên bạn nên sử dụng:

bundle install --path $HOME/.gem

nếu bạn muốn cài đặt đá quý vào cùng một nơi

gem install --user-install GEMNAME

sẽ cài đặt chúng, .gem/ruby/RUBYVERSIONtrong homedir của bạn. (Xem bình luận khác về câu hỏi này về --user-install.)

Điều này sẽ làm cho các viên đá quý hiển thị gem list, có thể gỡ cài đặt thông qua gem uninstall, vv mà không cần sudotruy cập. Các tập lệnh có thể chạy được cài đặt bởi gem hoặc bundler có thể được đưa vào đường dẫn của bạn bằng cách thêm

$HOME/.gem/ruby/RUBYVERSION/bin

để của bạn $PATH. gemchính nó cho bạn biết về điều này nếu nó không được thiết lập khi bạn làm gem install --user-install.


Cảm ơn vì điều đó. Có thể làm cho bundler làm điều này theo mặc định? (Và nếu vậy, nó có phải là một ý tưởng tốt không?)
joshtch

6
sudo gem install --no-user-install <gem-name>

sẽ cài đặt đá quý của bạn trên toàn cầu , tức là nó sẽ có sẵn cho tất cả các bối cảnh của người dùng.


1
Nó cũng có thể ghi đè lên một gem được cài đặt của nhà cung cấp, mà HĐH có thể mong đợi được đặt thành một phiên bản cụ thể. Và điều đó có thể phá vỡ mã dựa vào nó.
Tin Man

1
... hoặc nó có thể cài đặt một viên ngọc mà nhà cung cấp không cung cấp và làm như vậy theo cách làm cho nó có sẵn cho tất cả người dùng trên hệ thống. Nó nhẹ nhàng làm trầm trọng thêm rằng tất cả các câu trả lời ở khắp mọi nơi giả người đọc là một dev v / sa sysadmin người thực sự không muốn thực hiện một phiên bản cụ thể của một viên ngọc có sẵn cho tất cả người dùng. : D
dannysauer

1

Bạn có thể cài đặt đá quý vào một thư mục cụ thể (ví dụ nhà cung cấp /) trong ứng dụng Rails của bạn bằng cách sử dụng:

bundle install --path vendor

Điều này. Ngày nay, chương trình duy nhất cần sudo để cài đặt phần mềm là trình quản lý gói của bạn.
tjbp
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.