Errore: impossibile creare l'estensione nativa gem durante il tentativo di scaricare Rubocop


13

quando provo "sudo gem install rubocop", ottengo ...

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

Quindi ho provato una serie di soluzioni, in particolare quelle da /programming/22544754/failed-to-build-gem-native-extension-installing-compass (gemma diversa, stesso errore)

Ho provato a reinstallare RVM con "rvm reinstall --disable-binary 2.2.0" che ha richiesto del tempo ma non è stato risolto

poi ho provato $ "sudo apt-get install ruby-dev" che produce

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.

Ho anche provato "gem update --system" a cui ottengo ...

Latest version currently installed. Aborting.

Eventuali suggerimenti saranno molto apprezzati in quanto sono un noob totale e sono bloccato.


Come dice l'errore, hai rakeinstallato?
Muru,

Sì. Ho la versione più recente.
user642832

Risposte:


25

Fai sudo gem install rakee poi fai di sudo gem install rubocopnuovo e dovrebbe funzionare.

Non sembra importare che tu abbia installato la versione giusta di rake. Per me rake --versionsegnalato 10.5.0ma stavo ancora ricevendo lo stesso messaggio di errore come te. Guardando il messaggio di errore, si è alla ricerca di rakein un percorso specifico, non solo da nessuna parte sulla mia PATH: /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rakeriporta /usr/local/bin/rakeno /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. E infatti, come dice il messaggio di errore, non esiste alcun file in /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Questo probabilmente ha a che fare con l' rakeessere stato apt-get installed piuttosto che con gem installed. sudo gem install rakecrea quel file.


3

Sono stato in grado di risolvere questo problema con

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/

Vedi questo commit su GitHub .


2

Quando ho risposto a questa domanda nel 2017, ero scettico sulla soluzione di @ SeanHammond, perché la gemma del rastrello sembrava già installata. Ciò si è verificato attraverso il pacchetto rake di Debian e il loro sistema di integrazione rubygems. Installare di nuovo la gemma del rastrello, secondo Mr Hammond, ha funzionato per me oggi, poiché ha annullato la versione di Debian, quindi ha evitato il bug sottostante. Bene, prima diceva:

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:~$ 

Dopo aver applicato una correzione a monte per la segnalazione degli errori, che diceva:

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:~$ 

... che mi ha portato ad avere successo con:

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

Questo è abbastanza per rubygems per trovare il binario aggiornato:

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:~$ 

La soluzione di @ ShaunJackman ha funzionato anche per me. Questo potrebbe essere il modo in cui Debian dovrebbe risolverlo, anche se preferirei non lasciare i file in una directory sul mio computer che Debian potrebbe voler cambiare in seguito.

Un'ambientazione meno dolorosa era ambientata rake=/usr/bin/rakenell'ambiente da cui ho installato la gemma che volevo:

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:~$ 

... come ora notato nella mia segnalazione di bug Debian . Il tuo sudo potrebbe aver bisogno di --preserve-env per passare attraverso quell'impostazione.

(In una versione precedente di questa risposta, ho affermato che "l'equivalente di sudo gem install rainbowrisolto", ma risulta che il mio problema non era equivalente. Il mio problema non era con gemma, arcobaleno e rubocop ma in realtà con gem2.1, mediawiki- gateway (o il suo successore, mediawiki_api) e non. La ragione per cui l'installazione della dipendenza ha funzionato manualmente per la prima volta nel mio caso è che gem2.1 ha un bug in base al quale preferisce installare le versioni non definitive come dipendenze. in prosa, che il bug è questoQuando viene chiesto di installare unf stesso, invece, e giustamente, sceglie una versione di rilascio, una che utilizza semplicemente il percorso del codice ExtConfBuilder di rubygem piuttosto che quello di RakeBuilder. Ciò non avrebbe aiutato il poster originale con il loro problema con l'arcobaleno, poiché non avevano una versione preliminare. Ci scusiamo per la lunga digressione, ma forse aiuterà qualcun altro ad affrontare un problema simile.)


1
ancora più semplice per me: ha rake=rakefunzionato
Anthony Sottile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.