'sudo gem install' veya 'gem install' ve mücevher konumları


140

Koşmak ' sudo gem list --local' ve ' gem list --local' bana farklı sonuçlar veriyor. Mücevher yolum ana klasöre ayarlandı ve sadece ' gem list --local' dan taşlar içeriyor .

Taşların bilgisayarımdaki farklı dizinlerde yüklü olması muhtemelen iyi değil, bu yüzden mücevher yolunu farklı ayarlamalıyım ve her sudozaman bir şey yüklerken kullanmalıyım ?

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 boş.


1
Bence bu, kök ayrıcalıkları gerektiren bir mücevher kullanmak zorunda olanlarımız için geçerli bir soru.
Kelly

İlgili: stackoverflow.com/questions/21141584/… . Ruby sürümlerini yönetmek için rbenv kullanıyorum ve sudo gem install railsbunun yerine kullandığım için bir sorunla karşılaştım gem install rails.
Dennis

3
"Bence bu, kök ayrıcalıkları gerektiren bir mücevher kullanmak zorunda olanlarımız için geçerli bir soru." Yüklenecek veya çalıştırılacak kök ayrıcalıklarına ihtiyaç duyan herhangi bir mücevher son derece şüphelidir. Taşlar bir sanal alanda çalışabilmeli ve kullanıcının izinleriyle çalışabilmelidir.
Tin Man

1
sudoyüklü bir silah ayağınızı işaret ediyor. Ne yaptığını ve sisteminizi nasıl etkileyebileceğini anlamadan kullanmak, tetiği gözleriniz kapalıyken çekmek gibidir. Ayağınıza bir delik açabilirsiniz, olmayabilir, ancak her iki şekilde de hasarı nasıl geri alacağınızı bilmediğiniz sürece riski çalıştırmak istemezsiniz. Kullanımı sudoMac OS üzerinde, kendi kullanımları için Apple tarafından yüklenen sistem sermayeli Ruby, içine yazma. Üzerine bindirebiliriz, ancak yanlış şeyi değiştirmek kodlarını kırabilir. Bu yüzden kaynaktan yükleriz veya güvenli bir şekilde ayarlayabileceğimiz bir yere kurmak için başka bir şey kullanırız.
Tin Man

Yanıtlar:


146

Diğer tüm mesajların aksine sudotaşlar takarken KULLANMAYIN .

Bunun yerine, RVM'yi yüklemenizi ve taşınabilir mücevher evleri ve Ruby'nin farklı versiyonuyla mutlu bir hayata başlamayı öneririm , hepsi tek bir çatı altında yaşıyor.

Deneyimsiz olanlar için belgelerden :

RVM, birden fazla yakut ortamı ve mücevher setini kolayca yüklememizi, yönetmemizi ve bunlarla çalışmamızı sağlayan bir komut satırı aracıdır.

İle taşlar yükleme nedeni sudosadece daha kötü gem installne için taşlar yükler çünkü TÜM KULLANICILAR olarak root. Makineyi kullanan tek kişi sizseniz bu iyi olabilir, ancak eğer değilseniz garipliğe neden olabilir.

Tüm mücevherlerinizi havaya uçurup tekrar başlamak istediğinize karar verirseniz, root olmayan bir kullanıcı olarak bunu yapmak çok daha kolay ve güvenlidir.

RVMKullanmak istediğinize karar verirseniz, kullanmak sudoher türlü tuhaflığa neden olur, çünkü yüklediğiniz her Ruby sürümünün RVMkendi GEM_HOME'u vardır.

Ayrıca, geliştirme ortamınızı üretim ortamınıza olabildiğince yakın hale getirebilmeniz güzeldir ve üretimde muhtemelen kök olmayan bir kullanıcı olarak taşlar kuracaksınız.


12
Rvm için +1 önermek, ancak -1 sadece sudo
tfwright

10
Tamam, ama tüm nedenleriniz "çünkü RVM çok büyük" için kaynar sudo özellikle zararlı olduğu için değil. İstemediğiniz tek zaman, paylaşılan bir bilgisayarda olduğunuz özel durumdur. Eğer rvm tavsiye etmek istiyorsanız sadece yapın. FUDD başvurmak gerek yok.
tfwright

6
FUD yaymamaya çalışıyorum ve RVM olmayan nedenler vermeye çalıştım, eğer öyle görünüyorsa özür dilerim.
Ocak'ta jonnii

9
RVM iyi bir seçenektir. Ama daha iyisini denemelisin, RBENV. RVM'den daha az müdahaleci.
Andres

4
@ HontváriJózsefLevente Bir yorumda tüm sorularınızı ele almak zordur, ancak kısaca geliştirme ortamınızın üretime olabildiğince yakın olmasını istersiniz. biri ruby ​​2.1 ve diğeri 1.9 kullanıcıları kullanan iki uygulama üzerinde çalışıyorsanız, yerel ortamınızın doğru sürümü kullandığından emin olmanız gerekir. RVM veya RBENV'in sizin için yaptığı şey budur. Herhangi bir sanal alan ortamını kullanmakla aynı nedenden ötürü kullanacaksınız, ancak bu durumda ana fayda izolasyon. Umarım bu yardımcı olur!
jonnii

128

Taşları yerel ortamınıza (olmadan sudo) da yükleyebilirsiniz.

gem install --user-install <gemname>

Tek kullanıcılı bir bilgisayar olsa bile sistem düzeyinde yapılandırmanızla uğraşmamanızı tavsiye ederim.

Taşlara bakarak mücevherlerin nereye gittiğini kontrol edebilirsiniz gem environment. Benim durumumda "~ / .gem / ruby ​​/ 1.8".

Yolunuza eklenen yerel yüklemelerden bazı ikili dosyalara ihtiyacınız varsa, bashrc'nize aşağıdaki gibi bir şey ekleyebilirsiniz:

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

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


23
Yukarıdaki "Yine Bir Yapılandırma Aracı" çözümü yerine bu seçenek için +1, RBENV / RVM.
jjpe

Ben bir mücevher oluşturuyorum ve kılavuzları göre yapmak zorunda rake installve sudo isse düzeltmek için, ben orada /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbekleme yama gerekiyordu --user-install. Daha iyi bir çözüm bulunamıyor, çünkü görünüşe göre rake installek parametreler kabul edilmiyor.
Nakilon

Bu ilk emirden kesinlikle memnunum. Taş yüklemeye çalışıyorum ve sorun yaşıyorum çünkü sudo ayrıcalıklarına sahip değilim. Bu komut çalıştı !!
Caleb Kleveter

34

Daha da iyisi, --user-install~ / .gemrc dosyanızı girin, böylece her seferinde yazmak zorunda kalmazsınız

gem: --user-install

13

Durumunda

  • sudo ile yüklü yakut taşlar
  • sudo olmadan taşlar yüklemek istiyorum
  • rvm / rbenv kurmak istemiyorum

aşağıdakileri ekleyin .bash_profile:

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

Terminal VEYA'da yeni bir sekme açın source ~/.bash_profileve hazırsınız!


8
Ruby, Rails, Rake ve Ruby Devs'in bu çözümü kullanmak / kullanmak istediği başka bir şeyle çalışmayan biri için rvm kullanmaktan çok daha kolaydır. Gerçekten farklı yakut sürümleri umurumda değil sadece mücevher olarak dağıtılan bazı kabuk programları çalıştırmak istiyorum. Teşekkür ederim!
Kevin Gimbel

9

İlgili (paket kullanıcıları için), her şeyi kullanıcıya özgü iyi bilinen bir dizine koyacak RVM'ye daha hafif bir alternatif istiyorsanız, şunları kullanmanızı öneririm:

bundle install --path $HOME/.gem

Taşları aynı yere kurmak istiyorsanız

gem install --user-install GEMNAME

onları .gem/ruby/RUBYVERSIONhomedir'inize kuracak. (Bu soru hakkındaki diğer yoruma bakın--user-install .)

Bu, mücevherlere erişime gerek kalmadan görünür gem list, üzerinden kaldırılabilir gem uninstallvb sudo. Değerli taş veya paketleyici tarafından yüklenen çalıştırılabilir komut dosyaları ekleyerek yolunuza yerleştirilebilir

$HOME/.gem/ruby/RUBYVERSION/bin

sizin $PATH. gemkendisi bunu yaptığınızda ayarlanmamışsa bunu size bildirir gem install --user-install.


Bunun için teşekkürler. Bundler'ın bunu varsayılan olarak yapması mümkün mü? (Ve eğer öyleyse, bu iyi bir fikir olur mu?)
joshtch

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

geminizi küresel olarak yükleyecektir , yani tüm kullanıcıların bağlamları için kullanılabilir olacaktır.


1
Ayrıca, OS'nin belirli bir sürüme ayarlanmasını bekleyebileceği bir satıcı tarafından yüklenmiş mücevher üzerine de yazabilir. Ve bu, ona dayanan kodu kırabilir.
Tin Man

1
... veya bir satıcının sağlamadığı bir mücevher yükleyebilir ve bunu bir sistemdeki tüm kullanıcılar tarafından kullanılabilecek şekilde yapabilir. Orta derecede bütün cevaplar her yerde okuyucuyu varsayalım o ağırlaştırıcı oluyor aslında bir dev v / sa sistem yöneticisi olduğunu mu Talep tüm kullanıcılara açık bir taş belirli bir sürümünü yapmak. : D
dannysauer

1

Mücevherleri Rails uygulamanızdaki belirli bir klasöre (örnek satıcı /) aşağıdakileri kullanarak yükleyebilirsiniz:

bundle install --path vendor

Bu. Bu günlerde yazılım yüklemek için sudo'ya ihtiyaç duyan tek program paket yöneticinizdir.
tjbp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.