Kesalahan: Gagal membangun ekstensi asli permata ketika mencoba mengunduh Rubocop

13

ketika saya mencoba "sudo gem install rubocop", saya ...

Building native extensions.  This could take a while...
ERROR:  Error installing rubocop:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/rainbow-2.2.1/ext
/usr/bin/ruby2.3 mkrf_conf.rb

current directory: /var/lib/gems/2.3.0/gems/rainbow-2.2.1/ext
/usr/bin/ruby2.3 -rubygems /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake RUBYARCHDIR=/var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/rainbow-2.2.1 RUBYLIBDIR=/var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/rainbow-2.2.1
/usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError)

rake failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.3.0/gems/rainbow-2.2.1 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/rainbow-2.2.1/gem_make.out

Jadi saya telah mencoba sejumlah solusi, khususnya yang dari /programming/22544754/failed-to-build-gem-native-extension-installing-compass (permata berbeda, kesalahan yang sama)

Saya mencoba menginstal ulang RVM dengan "rvm instal ulang --disable-binary 2.2.0" yang membutuhkan waktu tetapi tidak memperbaikinya

selanjutnya saya mencoba $ "sudo apt-get install ruby-dev" yang menghasilkan

Reading package lists... Done
Building dependency tree       
Reading state information... Done
ruby-dev is already the newest version (1:2.3.0+1).
The following packages were automatically installed and are no longer required:
  dkms linux-headers-4.4.0-53 linux-headers-4.4.0-53-generic
  linux-image-4.4.0-53-generic linux-image-extra-4.4.0-53-generic
  python-appindicator python-gconf python-gi python-glade2
  python-gobject python-pexpect python-ptyprocess python-xdg
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 40 not upgraded.

Saya juga sudah mencoba "gem update --system" yang saya dapatkan ...

Latest version currently installed. Aborting.

Setiap saran akan sangat dihargai karena saya benar-benar noob dan saya mandek.

pengguna642832
sumber
Seperti yang dikatakan kesalahan, apakah Anda sudah rakemenginstal?
muru
Ya. Saya memiliki versi terbaru.
user642832

Jawaban:

25

Lakukan sudo gem install rakedan kemudian lakukan sudo gem install rubocoplagi dan itu akan berhasil.

Tampaknya tidak masalah bahwa Anda memiliki rake versi yang tepat diinstal. Bagi saya yang rake --versionmelaporkan 10.5.0tetapi saya masih mendapatkan pesan kesalahan yang sama seperti Anda. Melihat pesan kesalahan, itu adalah mencari rakedi jalan tertentu, tidak hanya di mana saja pada saya PATH: /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rakelaporan /usr/local/bin/rake, bukan /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Dan pada kenyataannya, seperti pesan kesalahan mengatakan, tidak ada file di /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Ini mungkin ada hubungannya dengan rakeyang telah apt-get installed daripada gem installed. sudo gem install rakemembuat file itu.

Sean Hammond
sumber
3

Saya dapat menyelesaikan masalah ini dengan

sudo mkdir -p /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin
sudo ln -s /usr/bin/rake /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/

Lihat komit ini di GitHub .

Shaun Jackman
sumber
2

Ketika saya menjawab ini pada tahun 2017, saya skeptis terhadap solusi @ SeanHammond, karena permata menyapu sudah tampaknya diinstal. Itu ternyata melalui paket rake Debian dan sistem integrasi rubygem mereka. Memasang permata menyapu lagi, per Mr Hammond, bekerja untuk saya hari ini, karena mengalahkan versi Debian, karenanya menghindari bug yang mendasarinya. Yah, pertama tertulis:

martind@balance:~$ sudo gem2.1 install --no-ri --no-rdoc rake
Fetching: rake-12.3.1.gem (100%)
ERROR:  While executing gem ... (TypeError)
    no implicit conversion of nil into String
martind@balance:~$ 

Setelah saya menerapkan perbaikan hulu untuk pelaporan kesalahan, yang mengatakan:

rake's executable "rake" conflicts with an unknown executable
Overwrite the executable? [yN]  n
ERROR:  Error installing rake:
    "rake" from rake conflicts with installed executable from 
martind@balance:~$ 

... yang membuat saya berhasil dengan:

martind@balance:~$ sudo gem2.1 install --no-ri --no-rdoc --format-executable rake
Successfully installed rake-12.3.1
1 gem installed
martind@balance:~$ 

Cukup untuk rubygems untuk menemukan biner yang diperbarui:

martind@balance:~$ ruby2.1 -we 'puts(Gem.bin_path("rake", "rake"))'
/var/lib/gems/2.1.0/gems/rake-12.3.1/exe/rake
martind@balance:~$ ls -l /var/lib/gems/2.1.0/gems/rake-12.3.1/exe/rake
-rwxr-xr-x 1 root root 1182 Apr 17 15:03 /var/lib/gems/2.1.0/gems/rake-12.3.1/exe/rake
martind@balance:~$ 

Solusi @ ShaunJackman bekerja untuk saya juga. Mungkin itu cara Debian memperbaikinya, meskipun saya lebih suka tidak meninggalkan file dalam direktori di komputer saya yang nantinya Debian mungkin ingin diubah.

Solusi yang kurang menyakitkan adalah pengaturan rake=/usr/bin/rakedi lingkungan tempat saya memasang permata yang saya inginkan:

martind@balance:~$ rake=/usr/bin/rake sudo gem2.1 install --no-ri --no-rdoc mediawiki_api
Fetching: unf-0.2.0.beta2.gem (100%)
Building native extensions.  This could take a while...
Successfully installed unf-0.2.0.beta2
Fetching: mediawiki_api-0.7.1.gem (100%)
Successfully installed mediawiki_api-0.7.1
2 gems installed
martind@balance:~$ 

... seperti yang sekarang tercantum dalam laporan bug Debian saya . Sudo Anda mungkin perlu --preserve-env untuk melewati pengaturan itu.

(Dalam versi sebelumnya dari jawaban ini, saya mengklaim bahwa "setara dengan sudo gem install rainbowmenyelesaikannya" tetapi ternyata masalah saya tidak setara. Masalah saya bukan dengan permata, pelangi dan rubocop tetapi sebenarnya dengan permata2.1, mediawiki- gateway (atau penggantinya, mediawiki_api) dan unf. Alasan bahwa menginstal dependensi secara manual pertama kali bekerja untuk kasus saya adalah bahwa gem2.1 memiliki bug di mana ia lebih memilih untuk menginstal versi pra-rilis sebagai dependensi. Saya curiga, dari kode daripada prosa, bahwa bug yang satu ini, Ketika diminta untuk menginstal unf sendiri, itu malah, dan benar, memilih versi rilis, yang kebetulan menggunakan jalur kode ExtConfBuilder rubygem daripada yang RakeBuilder. Itu tidak akan membantu poster asli dengan masalah pelangi mereka, karena mereka tidak mendapatkan versi pra-rilis. Maaf atas penyimpangan yang panjang, tapi mungkin itu akan membantu orang lain menghadapi masalah yang sama.)

Martin Dorey
sumber
1
bahkan lebih sederhana untuk saya: rake=rakebekerja
Anthony Sottile