web-dev-qa-db-fra.com

Erreur: Échec de la création de l'extension native gem lors du téléchargement de Rubocop.

quand j'essaie "Sudo gem install rubocop", je reçois ...

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

J'ai donc essayé plusieurs solutions, notamment celles de https://stackoverflow.com/questions/22544754/failed-to-build-gem-native-extension-installing-compass (un bijou différent, même erreur)

J'ai essayé de réinstaller RVM avec "rvm réinstaller --disable-binary 2.2.0" qui a pris un certain temps, mais n'a pas résolu le problème

ensuite, j'ai essayé $ "Sudo apt-get installer Ruby-dev", ce qui donne

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.

J'ai aussi essayé "gem update --system" auquel je reçois ...

Latest version currently installed. Aborting.

Toutes les suggestions seront grandement appréciées car je suis un noob total et je suis coincé.

13
user642832

Faites Sudo gem install rake puis Sudo gem install rubocop encore et cela devrait fonctionner.

Peu importe que vous ayez la bonne version de rake installée. Pour moi, rake --version a signalé 10.5.0 mais le message d'erreur que je recevais était toujours le même que vous. En regardant le message d'erreur, il recherche rakedans un chemin spécifique, et pas n'importe où sur mon PATHname__: /usr/bin/Ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rake signale /usr/local/bin/rake, pas /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Et en fait, comme le message d'erreur le dit, il n'y a pas de fichier à /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Ceci est probablement dû au fait que rakea été apt-get installed plutôt que gem installed. Sudo gem install rake crée ce fichier.

23
Sean Hammond

Lorsque j'ai répondu à cette question en 2017, j'étais sceptique vis-à-vis de la solution de @ SeanHammond, car le joyau de rake semblait déjà être installé. Cela s’est avéré être dû au paquetage rake de Debian et à son système d’intégration rubygems. Réinstaller le joyau de rake à nouveau, selon M. Hammond, a fonctionné pour moi aujourd'hui, car il annulait la version de Debian et évitait ainsi le bogue sous-jacent. Eh bien, d'abord, il a dit:

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

Après avoir appliqué n correctif en amont pour le rapport d'erreur, cela dit:

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

... ce qui m'a amené à réussir avec:

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

C'est assez pour que rubygems trouve le binaire mis à jour:

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 solution de @ ShaunJackman a également fonctionné pour moi. Cela pourrait bien être la façon dont Debian devrait résoudre ce problème, bien que je préfère ne pas laisser de fichiers dans un répertoire de ma machine que Debian voudra peut-être changer plus tard.

Une solution moins pénible consistait à définir rake=/usr/bin/rake dans l'environnement à partir duquel j'ai installé la gem que je voulais:

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

... comme noté dans mon rapport de bogue Debian . Votre Sudo pourrait avoir besoin de --preserve-env pour passer par ce paramètre.

(Dans une version antérieure de cette réponse, j'avais affirmé que "l'équivalent de Sudo gem install Rainbow l'avait résolu", mais il s'avère que mon problème n'était pas équivalent. Mon problème n'était pas avec gem, Rainbow et rubocop, mais en fait avec gem2.1, mediawiki -gateway (ou son successeur, mediawiki_api) et unf. La raison pour laquelle l'installation de la dépendance a d'abord fonctionné manuellement pour mon cas était que gem2.1 avait un bogue dans lequel elle préférait installer les versions préliminaires comme dépendances. Je suppose, à partir du code plutôt que la prose, que le bogue est celui-ci , lorsqu'il est invité à installer lui-même, il choisit à juste titre une version, une version qui utilise le chemin de code ExtConfBuilder de rubygem plutôt que celui de RakeBuilder Cela n’aurait pas aidé l’affiche originale à résoudre son problème Rainbow, car elle n’avait pas reçu de version préliminaire. Désolé pour la longue digression, mais cela aidera peut-être une autre personne confrontée à un problème similaire.)

2
Martin Dorey

J'ai pu résoudre ce problème avec

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/

Voir ce commit sur GitHub .

2
Shaun Jackman