Tidak dapat menginstal permata di OS X "El Capitan"

182

Saya tidak dapat menginstal dan menjalankan fakes3permata di El Capitan Beta 5.

Saya mencoba:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Kemudian saya mencoba melakukannya dengan cara cocoapods. Ini bekerja untuk cocoapods tetapi tidak untuk palsu3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Himanshu Yadav
sumber
3
Jangan gunakan sudountuk menginstal Ruby, atau mengubah permata. Alih-alih menggunakan rbenv atau RVM untuk menginstal dan mengelola Ruby. Baca dan ikuti petunjuk di situs masing-masing. Dan, dalam kedua kasus, setelah menginstal, jangan gunakan sudokecuali Anda mengerti apa yang berubah dan mengapa Anda ingin melakukannya.
the Tin Man

Jawaban:

333

Penafian: @theTinMan dan pengembang Ruby lainnya sering menunjukkan tidak digunakan sudosaat memasang permata dan menunjuk ke hal-hal seperti RVM . Itu benar sekali ketika melakukan pengembangan Ruby. Silakan dan gunakan itu.

Namun, banyak dari kita hanya ingin beberapa biner yang terjadi untuk didistribusikan sebagai permata (misalnya fakes3, cocoapods, xcpretty...). Saya jelas tidak ingin repot-repot mengelola ruby ​​terpisah. Berikut ini opsi yang lebih cepat:

Opsi 1: Tetap menggunakan sudo

Penggunaan sudomungkin baik jika Anda ingin alat ini diinstal secara global.

Masalahnya adalah bahwa binari-binari ini diinstal ke dalam /usr/bin, yang terlarang sejak El Capitan. Namun, Anda dapat menginstalnya /usr/local/binsebagai gantinya. Di situlah Homebrew menginstal barang-barangnya, jadi mungkin sudah ada.

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

Permata akan diinstal ke dalam /usr/local/bindan setiap pengguna di sistem Anda dapat menggunakannya jika ada di PATH mereka .

Opsi 2: Instal di direktori home Anda (tanpa sudo)

Berikut ini akan menginstal permata ~/.gemdan memasukkan binari ~/bin(yang kemudian Anda tambahkan ke Anda PATH).

gem install fakes3 --user-install -n~/bin

Jadikan sebagai default

Bagaimanapun, Anda dapat menambahkan parameter ini ke Anda ~/.gemrcsehingga Anda tidak harus mengingatnya:

gem: -n/usr/local/bin

yaitu echo "gem: -n/usr/local/bin" >> ~/.gemrc

atau

gem: --user-install -n~/bin

yaitu echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Kiat: Anda juga dapat melempar masuk --no-documentuntuk melewati pembuatan dokumentasi pengembang Ruby.)

nschum
sumber
Terima kasih banyak! Saya telah berjuang dengan versi baru dari brew dan ruby ​​tetapi masih tidak bisa melewati masalah / usr / bin. Menentukan jalur yang diinginkan saat menjalankan gem installmemecahkan masalah.
Daniel Saidi
The .gemrcharus memiliki gem: -n /usr/local/bin(membutuhkan ruang setelah -n).
Paul Schreiber
@ PaulSchreiber Yah, saya sudah menggunakannya tanpa spasi selama lima bulan sekarang. :) Anda yakin
nschum
2
Plus 1 untuk Opsi # 2, yang merupakan alternatif yang layak dan aman jika Anda hanya menginginkan binari tanpa Ruby yang terpisah. Direktori rumah kami adalah tempat yang sempurna untuk permata yang ditambahkan, dan perubahan cepat ke PATH membuatnya mudah diakses. Saya tidak bisa merekomendasikan Opsi # 1 karena seseorang pada akhirnya akan menimpa permata dan merusak sistem mereka Ruby atau kode bawaan Apple yang menggunakannya, dan kemudian mereka akan mengajukan pertanyaan lain pada SO tentang cara memperbaikinya.
the Tin Man
1
Ini adalah jawaban yang bagus, tapi mungkin sudah ketinggalan zaman. Di Sierra, opsi yang saya butuhkan adalah --install-dir / usr / local / bin
Ryan Ballantyne
107

Dalam kasus saya, saya harus menginstal ulang Ruby menggunakan Brew . Itu tampaknya telah memecahkan masalah karena saya dapat menginstal permata lagi.

brew install ruby

Setelah ini, Anda harus keluar dan masuk kembali, baik secara grafis atau hanya me-restart terminal Anda.

Francisco Gonzalez Rull
sumber
Bekerja dengan baik untuk saya! Saya kira itu menghilangkan keanehan dalam menginstal ruby ​​yang dibundel ... IMO ini adalah solusi terbaik.
n13
Anda dapat mengetahui ruby ​​mana yang sedang dijalankan dengan `` `yang-ruby` `` Di mesin saya yang memberikan: `` `$ yang-ruby / usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `Mengenai mengapa / usr / local / bin ada di PATH dua kali - sepertinya brew install rubymeletakkannya di sana, bahkan jika sudah ada di sana. Agaknya ruby ​​di / usr / local dikonfigurasikan untuk menginstal gem-nya di lokasi yang tidak memerlukan akses root (yang masuk akal sebenarnya).
WallStProg
7
PS Anda harus keluar dan masuk kembali (melalui Terminal) atau gem installmasih akan gagal.
WallStProg
Bekerja dengan baik untuk saya. Saya menggabungkan jawaban yang diterima dengan yang ini. Terima kasih keduanya
youssman
1
Anda tidak perlu keluar dan masuk lagi. Jalankan saja rehashuntuk memastikan shell Anda menyadari bahwa ada yang baru rubysebelumnya di $PATH. Bahkan ini tidak akan diperlukan dalam situasi di mana Anda belum berlari rubydi sesi shell.
Radon Rosborough
38

Itu karena fungsi keamanan baru OS X "El Capitan". Coba tambahkan --user-installalih-alih menggunakan sudo:

$ gem install *** --user-install

Misalnya, jika Anda ingin menginstal fake3 gunakan saja:

$ gem install fake3 --user-install
Shao Wenbin
sumber
Iya! Terima kasih banyak!
Louis Magnotti
Setelah menghabiskan 30 menit dengan pendekatan pembuatan bir, terminal penutupan dll akhirnya solusi ini bekerja pada 10.10.5 Tapi masih tidak yakin mengapa pendekatan minuman tidak bekerja. Mohon klarifikasi. tempat pembuatan bir ruby ​​yang dipasang / usr / bin / ruby
vikramvi
1
Wow sekarang masalahnya adalah kembali permata instal redcarpet -v '3.3.4' - kesalahan pemasangan pengguna-insting PERINGATAN: Anda tidak memiliki / Pengguna / user_name/.gem/ruby/2.0.0/bin di PATH Anda, gem executable tidak akan berjalan. Sebelumnya saya tidak mendapatkan kesalahan ini
vikramvi
1
stackoverflow.com/questions/19579392/... , ini membantu saya untuk menyelesaikan masalah pada akhirnya
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Coba ini. Ini pasti akan berhasil.

Femina Brahmbhatt
sumber
2
tentu saja tidak.
Maarten Hartman
19

Anda harus memperbarui Xcode ke yang terbaru (v7.0.1) dan semuanya akan berfungsi seperti biasa.

Jika setelah Anda menginstal Xcode terbaru dan masih tidak berfungsi cobalah untuk menginstal permata dengan cara ini:

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

Sebagai contoh:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy
astrasleepz
sumber
10

Sepertinya ketika meningkatkan ke OS X El Capitain, direktori / usr / local dimodifikasi dalam beberapa cara:

  1. izin pengguna disetel ulang (ini juga masalah bagi orang yang menggunakan Homebrew)
  2. binari dan symlink mungkin telah dihapus atau diubah

[Sunting] Ada juga hal awal yang harus dilakukan: tingkatkan Xcode ...

Solusi untuk # 1:

$ sudo chown -R $(whoami):admin /usr/local

Ini akan memperbaiki izin pada /usr/localdirektori yang kemudian akan membantu keduanya gem installdan brew install|link|...perintah berfungsi dengan baik.

Solusi untuk # 2:

Masalah berbasis Ruby

Pastikan Anda telah memperbaiki izin /usr/localdirektori (lihat # 1 di atas)

Pertama-tama coba instal ulang permata Anda menggunakan:

sudo gem install <gemname>

Perhatikan bahwa itu akan menginstal versi terbaru dari permata yang ditentukan.

Jika Anda tidak ingin menghadapi masalah kompatibilitas ke belakang, saya sarankan Anda pertama kali menentukan versi permata mana yang ingin Anda dapatkan dan kemudian instal ulang dengan -v version. Lihat contoh di bawah ini untuk memastikan bahwa sistem tidak akan mendapatkan versi baru dari capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Masalah berbasis bir

Perbarui minuman dan tingkatkan formula Anda

$ brew update
$ brew upgrade

Anda mungkin juga perlu menautkan kembali beberapa dari mereka secara manual

$ brew link <formula>
foobar
sumber
3

Seperti yang telah dikatakan, masalah ini berasal dari fungsi keamanan Mac OSX sejak "El Capitan".

Menggunakan sistem default Ruby, proses instalasi terjadi di /Library/Ruby/Gems/2.0.0direktori yang tidak tersedia bagi pengguna dan memberikan kesalahan.

Anda dapat melihat parameter lingkungan Ruby Anda dengan perintah

$ gem env

Ada DIREKTUR INSTALASI dan DIREKTUR INSTALASI PENGGUNA. Untuk menggunakan direktori instalasi pengguna alih-alih direktori instalasi default, Anda dapat menggunakan --user-installparameter sebagai gantinya menggunakan sudoyang tidak pernah merupakan cara yang disarankan untuk dilakukan.

$ gem install myGemName --user-install

Seharusnya tidak ada masalah hak lagi dalam proses. Permata kemudian diinstal di direktori pengguna:~/.gem/Ruby/2.0.0/bin

Tetapi untuk membuat permata yang terpasang tersedia, direktori ini harus tersedia di jalur Anda. Menurut faq Ruby , Anda dapat menambahkan baris berikut ke ~/.bash_profileatau~/.bashrc

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

Kemudian tutup dan muat ulang terminal Anda atau muat ulang Anda .bash_profileatau .bashrc( . ~/.bash_profile)

emchateau
sumber
2

Ini adalah solusi yang saya gunakan:

Catatan: perbaikan ini untuk kompas seperti yang saya tulis pada pertanyaan SO lainnya, tapi saya telah menggunakan proses yang sama untuk mengembalikan fungsionalitas ke semua proses terminal, jelas permata yang Anda instal berbeda, tetapi prosesnya sama.

Saya memiliki masalah yang sama. Ini karena Apple menerapkan System Integrity Protection (SIP). Anda harus terlebih dahulu menonaktifkan itu ...

Reboot dalam mode pemulihan:

Nyalakan ulang dan tahan Command + R hingga Anda melihat logo apel.

Setelah boot pilih Utilities> Terminal dari bar atas.

Tipe: csrutil disable

lalu ketik: reboot

Setelah reboot

Buka terminal cadangan dan masukkan perintah:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Permata individual yang gagal harus diperbaiki, jadi untuk masing-masing lakukan hal berikut:

Di mesin saya ini adalah ketergantungan pertama yang tidak berfungsi jadi saya mendaftar :

sudo gem pristine ffi --version 1.9.3

Lanjutkan melalui daftar permata yang perlu diperbaiki. Dalam semua yang Anda cari sekitar 10 menit untuk memperbaikinya, tetapi Anda akan memiliki perintah terminal untuk kompas bekerja.

Tangkapan layar

jbalesteri
sumber
2

Jika permata yang Anda coba pasang membutuhkan pustaka xml, cobalah ini:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Secara khusus, saya mengalami masalah saat menginstal permata nokogiri v 1.6.8 pada OS X El Capitan

dan ini akhirnya berhasil untuk saya:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Untuk memastikan Anda telah menginstal libxml2 dan libxslt, Anda dapat melakukan:

brew install libxml2 libxslt
brew install libiconv

dan kemudian periksa untuk memastikan Anda memiliki alat baris perintah xcode diinstal:

xcode-select --install 

harus mengembalikan kesalahan ini:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Anirban Nandi 'Joy'
sumber
1

Menginstal ulang RVM berfungsi untuk saya, tetapi saya harus menginstal ulang semua permata saya sesudahnya:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
kkelleey
sumber
0

Saya mengalami masalah yang sama setelah menginstal El Capitan, saya mencoba menginstal sass dan kompas ke proyek symfony, perintah berikut mengembalikan kesalahan berikut:

$ sudo gem instal kompas

GALAT: Kesalahan saat memasang kompas: GALAT: Gagal membangun ekstensi bawaan permata.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

memeriksa ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': Kompiler gagal menghasilkan file yang dapat dieksekusi. (RuntimeError)

Jadi saya kemudian mencoba menginstal sass dengan: $ sudo gem install sass

Mendapat pesan kesalahan yang sama, setelah beberapa googling saya berhasil menginstal sass menggunakan perintah berikut:

$ sudo gem install -n / usr / local / bin sass

Di atas bekerja untuk saya dengan menginstal sass tetapi tidak berfungsi untuk menginstal kompas. Saya membaca bahwa seseorang di suatu tempat telah membuka instance xcode lalu menutupnya lagi, lalu berhasil menjalankan perintah yang sama setelah itu berhasil untuk mereka. Saya mencoba membuka xcode tetapi diminta dengan pesan yang mengatakan bahwa versi xcode yang diinstal tidak kompatibel dengan El Capitan. Jadi saya kemudian memperbarui xcode dari app store, menjalankan kembali perintah berikut yang kali ini berhasil dijalankan:

$ sudo gem install -n / usr / local / bin kompas

Saya kemudian dapat menjalankan $ kompas init

Saya sekarang memiliki semua permata saya bekerja dan dapat melanjutkan untuk membangun beberapa barang bagus :)

Barry Poore
sumber
0

Saya rm -rf ./vendorkemudian harus berlari bundle installlagi.

VoA
sumber
-1

Saya tidak suka memasang barang dengan sudo. setelah Anda mulai dengan sudo Anda tidak bisa berhenti ..

coba berikan izin ke direktori Permata.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
sumber
2
Jangan mengubah kepemilikan sistem permata Ruby. Itu dapat menyebabkan masalah ketika Mac OS mencoba memperbarui apa pun.
the Tin Man
-1
sudo chown -R $(whoami):admin /usr/local

Itu akan memberikan izin kembali (Homebrew menginstal ruby ​​di sana)

Mirror318
sumber
2
Jika Anda menjalankan perintah ini dan itu mengacaukan izin data MySQL Anda, Anda harus mengatur izin kembali. Begini caranya. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux