'sudo gem install' atau 'gem install' dan lokasi permata

140

Menjalankan ' sudo gem list --local' dan ' gem list --local' memberi saya hasil yang berbeda. Jalur permata saya disetel ke folder beranda dan hanya berisi permata dari ' gem list --local'.

Mungkin tidak baik untuk menginstal permata di direktori yang berbeda di komputer saya, jadi haruskah saya menetapkan jalur permata yang berbeda, dan haruskah saya selalu menggunakan sudoketika menginstal sesuatu?

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

raphael_turtle
sumber
1
Saya pikir ini adalah pertanyaan yang valid bagi kita yang harus menggunakan permata yang membutuhkan hak akses root.
Kelly
Terkait: stackoverflow.com/questions/21141584/… . Saya menggunakan rbenv untuk mengelola versi Ruby dan mengalami masalah karena saya menggunakan sudo gem install railsbukan gem install rails.
Dennis
3
"Saya pikir ini adalah pertanyaan yang valid bagi kita yang harus menggunakan permata yang membutuhkan hak akses root." Saya pikir permata apa pun yang membutuhkan hak root, baik untuk diinstal, atau dijalankan, sangat mencurigakan. Permata harus dapat berjalan di kotak pasir dan dijalankan dengan izin pengguna.
the Tin Man
1
sudoadalah pistol yang dimuat mengarah ke kaki Anda. Menggunakannya tanpa memahami apa fungsinya dan bagaimana hal itu dapat memengaruhi sistem Anda seperti menarik pelatuk dengan mata tertutup. Anda mungkin menembak lubang di kaki Anda, Anda mungkin tidak, tetapi bagaimanapun Anda tidak ingin mengambil risiko kecuali Anda tahu cara membatalkan kerusakan. Menggunakan tulisan sudoke dalam Ruby yang dimiliki sistem, yang, pada Mac OS, dipasang oleh Apple untuk penggunaan mereka sendiri. Kita dapat mendukungnya, tetapi mengubah hal yang salah dapat merusak kode mereka. Itu sebabnya kami memasang dari sumber atau menggunakan yang lain untuk memasang di mana kami dapat men-tweak dengan aman.
the Tin Man

Jawaban:

146

Berlawanan dengan semua posting lainnya yang saya sarankan TIDAK gunakan sudosaat memasang permata.

Sebaliknya saya sarankan Anda menginstal RVM dan memulai kehidupan yang bahagia dengan rumah permata portabel dan versi Ruby yang berbeda semua hidup di bawah satu atap.

Untuk yang belum tahu, dari dokumentasi :

RVM adalah alat baris perintah yang memungkinkan kita untuk dengan mudah menginstal, mengelola, dan bekerja dengan beberapa lingkungan ruby ​​dan set permata.

Alasan mengapa menginstal permata dengan sudolebih buruk dari sekedar gem installkarena menginstal permata untuk SEMUA PENGGUNA sebagai root. Ini mungkin baik-baik saja jika Anda satu-satunya orang yang menggunakan mesin, tetapi jika Anda tidak melakukannya dapat menyebabkan keanehan.

Jika Anda memutuskan untuk membuang semua permata Anda dan mulai lagi, itu jauh lebih mudah, dan lebih aman, untuk melakukannya sebagai pengguna non-root.

Jika Anda memutuskan ingin menggunakan RVMmaka menggunakan sudoakan menyebabkan semua jenis keanehan karena setiap versi Ruby yang Anda instal RVMmemiliki GEM_HOME sendiri.

Juga, menyenangkan jika Anda dapat membuat lingkungan pengembangan Anda sedekat mungkin dengan lingkungan produksi Anda, dan dalam produksi Anda kemungkinan besar akan menginstal permata sebagai pengguna non-root.

jonnii
sumber
12
+1 untuk rvm menyarankan, tetapi -1 untuk kutukan yang membingungkan atas kemungkinan alternatif hanya menggunakan sudo
tfwright
10
Ok, tetapi semua alasan Anda menjadi "karena RVM sangat bagus" bukan karena menggunakan sudo sangat berbahaya. Satu-satunya waktu yang tidak Anda inginkan adalah dalam situasi spesifik saat Anda menggunakan komputer bersama. Jika Anda ingin merekomendasikan rvm lakukan saja. Tidak perlu resor ke FUDD.
tfwright
6
Saya mencoba tidak menyebarkan FUD, dan saya mencoba memberikan alasan non-RVM, saya minta maaf jika sepertinya begitu.
Jonnii
9
RVM adalah pilihan yang bagus. Tetapi Anda harus mencoba yang lebih baik, RBENV. Ini kurang mengganggu daripada RVM.
Andres
4
@ HontváriJózsefLevente sulit untuk menjawab semua pertanyaan Anda dalam komentar, tetapi singkatnya adalah Anda ingin lingkungan pengembangan Anda sedekat mungkin dengan produksi. jika Anda bekerja pada dua aplikasi, yang salah satunya menggunakan ruby ​​2.1 dan yang lainnya yang pengguna 1.9 maka Anda harus memastikan lingkungan lokal Anda menggunakan versi yang tepat. itulah yang dilakukan RVM atau RBENV untuk Anda. Anda akan menggunakannya untuk alasan yang sama Anda akan menggunakan lingkungan kotak pasir apa pun, tetapi manfaat utama dalam kasus ini adalah isolasi. Saya harap ini membantu!
jonnii
128

Anda juga dapat memasang permata di lingkungan lokal Anda (tanpa sudo) dengan

gem install --user-install <gemname>

Saya menyarankan agar Anda tidak mengacaukan konfigurasi tingkat sistem Anda meskipun itu komputer pengguna tunggal.

Anda dapat memeriksa ke mana permata pergi dengan melihat gempaths dengan gem environment. Dalam kasus saya ini "~ / .gem / ruby ​​/ 1.8".

Jika Anda memerlukan beberapa binari dari instalasi lokal yang ditambahkan ke path Anda, Anda dapat menambahkan sesuatu ke bashrc Anda seperti:

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

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

Nils
sumber
23
Beri +1 untuk opsi ini daripada solusi "Yet Another Configuration Tool" di atas, RBENV / RVM.
jjpe
Saya membuat permata dan menurut manual yang harus saya lakukan rake installdan untuk memperbaiki sudo isse, saya harus menambal /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbmenambahkan secara manual di --user-installsana. Tidak dapat menemukan solusi yang lebih baik, karena sepertinya rake installtidak menerima parameter tambahan.
Nakilon
Saya benar-benar senang dengan perintah pertama itu. Saya telah mencoba memasang permata dan mengalami masalah karena saya tidak memiliki hak sudo. Perintah itu berhasil !!!!
Caleb Kleveter
34

Lebih baik lagi, masukkan --user-installfile ~ / .gemrc Anda sehingga Anda tidak perlu mengetiknya setiap waktu

gem: --user-install
allyraza
sumber
13

Jika Anda

  • memasang permata ruby ​​dengan sudo
  • ingin menginstal permata tanpa sudo
  • tidak ingin menginstal rvm / rbenv

tambahkan yang berikut ke .bash_profile:

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

Buka tab baru di Terminal ATAU source ~/.bash_profiledan Anda siap berangkat!

David Salamon
sumber
8
Untuk seseorang yang tidak bekerja dengan Ruby, Rails, Rake, dan apa pun yang Ruby Devs gunakan / ingin gunakan solusi INI jauh lebih mudah daripada menggunakan rvm. Saya benar-benar tidak peduli memiliki versi ruby ​​yang berbeda. Saya hanya ingin menjalankan beberapa program shell yang didistribusikan sebagai permata. Terima kasih!
Kevin Gimbel
9

Terkait (untuk pengguna bundler), jika Anda menginginkan alternatif yang lebih ringan untuk RVM yang akan meletakkan semuanya dalam direktori terkenal khusus pengguna, saya sarankan menggunakan:

bundle install --path $HOME/.gem

jika Anda ingin memasang permata ke tempat yang sama itu

gem install --user-install GEMNAME

akan menginstalnya, .gem/ruby/RUBYVERSIONdi homedir Anda. (Lihat komentar lain tentang pertanyaan ini tentang --user-install.)

Ini akan membuat permata terlihat gem list, dihapus melalui gem uninstall, dll. Tanpa perlu sudoakses. Skrip runnable yang diinstal oleh gem atau bundler dapat dimasukkan ke jalur Anda dengan menambahkan

$HOME/.gem/ruby/RUBYVERSION/bin

untuk Anda $PATH. gemitu sendiri memberi tahu Anda tentang ini jika tidak disetel saat Anda melakukannya gem install --user-install.

Todd Vierling
sumber
Terima kasih untuk ini. Apakah mungkin membuat bundler melakukan ini secara default? (Dan jika demikian, apakah itu ide yang bagus?)
joshtch
6
sudo gem install --no-user-install <gem-name>

akan memasang permata Anda secara global , yaitu permata akan tersedia untuk semua konteks pengguna.

Tasos Koutoumanos
sumber
1
Itu juga dapat menimpa permata yang diinstal vendor, yang mungkin diharapkan OS untuk diatur ke versi tertentu. Dan itu bisa memecahkan kode yang bergantung padanya.
the Tin Man
1
... atau itu dapat menginstal permata yang tidak disediakan vendor, dan melakukannya dengan cara yang membuatnya tersedia untuk semua pengguna pada suatu sistem. Ini agak memperparah bahwa semua jawaban di mana-mana menganggap pembaca adalah dev v / sa sysadmin yang benar-benar tidak menginginkan untuk membuat versi tertentu dari sebuah permata yang tersedia untuk semua pengguna. : D
dannysauer
1

Anda dapat menginstal permata ke folder tertentu (misalnya vendor /) di aplikasi Rails Anda menggunakan:

bundle install --path vendor
Chadi
sumber
Ini. Saat ini satu-satunya program yang memerlukan sudo untuk menginstal perangkat lunak adalah manajer paket Anda.
tjbp