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

13

quand j'essaye "sudo gem install rubocop", j'obtiens ...

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é un certain nombre de solutions, en particulier celles de /programming/22544754/failed-to-build-gem-native-extension-installing-compass (gemme différente, même erreur)

J'ai essayé de réinstaller RVM avec "rvm uninstall --disable-binary 2.2.0", ce qui a pris du temps mais je ne l'ai pas résolu

ensuite j'ai essayé $ "sudo apt-get install ruby-dev" 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 j'arrive ...

Latest version currently installed. Aborting.

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

user642832
la source
Comme le dit l'erreur, avez-vous rakeinstallé?
muru
Oui. J'ai la dernière version.
user642832

Réponses:

27

Faites sudo gem install rakeet sudo gem install rubocoprecommencez et cela devrait fonctionner.

Il ne semble pas important que la bonne version de râteau soit installée. Pour moi rake --versionsignalé 10.5.0mais je recevais toujours le même message d'erreur que vous. En regardant le message d'erreur, il est à la recherche rakeà un chemin spécifique, non seulement nulle part sur mon PATH: /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rakerapports /usr/local/bin/rake, non /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Et en fait, comme l'indique le message d'erreur, il n'y a pas de fichier à /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Cela est probablement dû au fait d' rakeavoir été apt-get installédité plutôt gem installqu'éd. sudo gem install rakecrée ce fichier.

Sean Hammond
la source
3

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 .

Shaun Jackman
la source
2

Lorsque j'ai répondu à cette question en 2017, j'étais sceptique quant à la solution de @ SeanHammond, car le rake gem semblait déjà installé. Cela s'est avéré être passé par le paquetage rake de Debian et leur système d'intégration rubygems. L'installation de la gemme de râteau à nouveau, selon M. Hammond, a fonctionné pour moi aujourd'hui, car elle a remplacé la version de Debian, évitant 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é un correctif en amont pour le rapport d'erreur, cela disait:

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

Cela suffit 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. C'est peut-être ainsi que Debian devrait le réparer, même si je préfère ne pas laisser de fichiers dans un répertoire sur ma machine que Debian pourrait vouloir changer plus tard.

Une solution de contournement moins pénible se déroulait rake=/usr/bin/rakedans l'environnement à partir duquel j'ai installé le joyau 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 indiqué dans mon rapport de bogue Debian . Votre sudo peut avoir besoin de --preserve-env pour passer par ce paramètre.

(Dans une version antérieure de cette réponse, j'ai affirmé que "l'équivalent de la sudo gem install rainbowrésoudre" mais il s'avère que mon problème n'était pas équivalent. Mon problème n'était pas avec gem, arc-en-ciel et rubocop mais en fait avec gem2.1, mediawiki- passerelle (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 a un bogue par lequel il préfère installer les versions préliminaires en tant que dépendances. Je soupçonne, à partir du code plutôt que du prose, que le bug est celui-ci, Lorsqu'on lui a demandé d'installer unf lui-même, il choisit à la place, et à juste titre, une version finale, celle qui se trouve utiliser le chemin de code ExtConfBuilder de rubygem plutôt que son chemin RakeBuilder. Cela n'aurait pas aidé l'affiche originale avec son problème d'arc-en-ciel, car ils n'ont pas obtenu de version préliminaire. Désolé pour la longue digression, mais cela aidera peut-être quelqu'un d'autre face à un problème similaire.)

Martin Dorey
la source
1
encore plus simple pour moi: rake=raketravaillé
Anthony Sottile