Fehler: Fehler beim Erstellen der nativen Gem-Erweiterung beim Herunterladen von Rubocop

13

Wenn ich "sudo gem install rubocop" versuche, bekomme ich ...

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

Daher habe ich eine Reihe von Lösungen ausprobiert, insbesondere die von /programming/22544754/failed-to-build-gem-native-extension-installing-compass (anderes Juwel, gleicher Fehler).

Ich habe versucht, RVM mit "rvm restart --disable-binary 2.2.0" neu zu installieren, was eine Weile gedauert hat, es aber nicht behoben hat

Als nächstes habe ich $ "sudo apt-get install ruby-dev" ausprobiert

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.

Ich habe auch "gem update --system" ausprobiert, auf das ich ...

Latest version currently installed. Aborting.

Irgendwelche Vorschläge werden sehr geschätzt, da ich ein totaler Neuling bin und feststecke.

user642832
quelle
Wie der Fehler sagt, haben Sie rakeinstalliert?
Muru
Ja. Ich habe die neueste Version.
user642832

Antworten:

25

Tun sudo gem install rakeund dann sudo gem install rubocopwieder tun und es sollte funktionieren.

Es scheint nicht wichtig zu sein, dass Sie die richtige Version von Rake installiert haben. Bei mir rake --versionhat sich 10.5.0aber gemeldet , dass ich immer noch die selbe Fehlermeldung wie du bekomme. Mit Blick auf die Fehlermeldung, wird er sucht rakeauf einem bestimmten Pfad, nicht irgendwo auf meine PATH: /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rakeBerichte /usr/local/bin/rake, nicht /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Und in der Tat, wie die Fehlermeldung besagt, gibt es keine Datei an /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Dies hat wahrscheinlich damit zu tun, rakedass man nicht apt-get installredigiert, sondern gem installredigiert wurde. sudo gem install rakeerstellt diese Datei.

Sean Hammond
quelle
3

Ich konnte dieses Problem mit lösen

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/

Siehe dieses Commit auf GitHub .

Shaun Jackman
quelle
2

Als ich dies 2017 beantwortete, war ich skeptisch gegenüber der Lösung von @ SeanHammond, da der Rake-Edelstein bereits installiert zu sein schien. Es stellte sich heraus, dass dies durch das Rake-Paket von Debian und dessen Rubygems-Integrationssystem geschehen ist. Das erneute Installieren des Rake-Gems, laut Mr. Hammond, funktionierte heute für mich, da es Debians Version überschritt und somit den zugrundeliegenden Fehler verhinderte. Nun, zuerst hieß es:

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

Nachdem ich einen Upstream-Fix für die Fehlerberichterstattung angewendet hatte, lautete dieser:

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

... was mich zum Erfolg geführt hat:

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

Damit können Rubygems die aktualisierte Binärdatei finden:

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

@ ShaunJackmans Lösung hat auch bei mir funktioniert. Auf diese Weise sollte Debian das Problem möglicherweise beheben, obwohl ich lieber keine Dateien in einem Verzeichnis auf meinem Computer belassen möchte, das Debian später möglicherweise ändern möchte.

In rake=/usr/bin/rakeder Umgebung, in der ich den gewünschten Edelstein installiert habe, war die Problemumgehung weniger schmerzhaft :

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

... wie jetzt in meinem Debian-Fehlerbericht vermerkt . Ihr Sudo benötigt möglicherweise --preserve-env, um diese Einstellung zu durchlaufen.

(In einer früheren Version dieser Antwort habe ich behauptet, "das Äquivalent von sudo gem install rainbowgelöst", aber es stellte sich heraus, dass mein Problem nicht äquivalent war. Mein Problem war nicht mit gem, rainbow und rubocop, sondern tatsächlich mit gem2.1, mediawiki gateway (oder dessen Nachfolger, mediawiki_api) und unf. Der Grund, warum die manuelle Installation der Abhängigkeit in meinem Fall zuerst funktionierte, war, dass gem2.1 einen Fehler aufweist, bei dem es bevorzugt, Vorabversionen als Abhängigkeiten zu installieren Prosa, dass der Fehler dieser istWenn Sie aufgefordert werden, unf selbst zu installieren, wird stattdessen zu Recht eine Release-Version ausgewählt, die nur den ExtConfBuilder-Codepfad von rubygem und nicht den RakeBuilder-Codepfad verwendet. Das hätte dem Original-Poster bei ihrem Regenbogenproblem nicht geholfen, da sie keine Vorabversion bekamen. Entschuldigen Sie den langen Exkurs, aber vielleicht hilft er jemandem, der sich einem ähnlichen Problem gegenübersieht.)

Martin Dorey
quelle
1
noch einfacher für mich: rake=rakegearbeitet
Anthony Sottile