Error: Error al construir la extensión nativa de gemas al intentar descargar Rubocop

13

cuando intento "sudo gem install rubocop", me sale ...

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

Así que probé una serie de soluciones, específicamente aquellas de /programming/22544754/failed-to-build-gem-native-extension-installing-compass (gema diferente, mismo error)

Intenté reinstalar RVM con "rvm reinstall --disable-binary 2.2.0" que tardó un tiempo pero no lo solucionó

luego probé $ "sudo apt-get install ruby-dev" que 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.

También probé "gem update --system" al que llegué ...

Latest version currently installed. Aborting.

Cualquier sugerencia será muy apreciada ya que soy un novato total y estoy atascado.

usuario642832
fuente
Como dice el error, ¿has rakeinstalado?
muru
Sí. Tengo la versión más nueva.
user642832

Respuestas:

25

Hazlo sudo gem install rakey luego hazlo de sudo gem install rubocopnuevo y debería funcionar.

No parece importar que tenga instalada la versión correcta de rake. Para mí rake --versioninformó 10.5.0pero todavía recibía el mismo mensaje de error que usted. Mirando el mensaje de error, que está buscando rakea una ruta específica, no sólo en cualquier parte de mi PATH: /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError). which rakeinformes /usr/local/bin/rake, no /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Y, de hecho, como dice el mensaje de error, no hay ningún archivo en /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake. Esto probablemente tenga que ver con rakehaber sido apt-get installeditado en lugar de gem installed. sudo gem install rakecrea ese archivo.

Sean Hammond
fuente
3

Pude resolver este 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/

Ver este commit en GitHub .

Shaun Jackman
fuente
2

Cuando respondí esto en 2017, era escéptico sobre la solución de @ SeanHammond, porque la gema de rastrillo ya parecía estar instalada. Resultó haber sido a través del paquete de rastrillos de Debian y su sistema de integración rubygems. Instalar la gema de rastrillo nuevamente, según el Sr. Hammond, funcionó para mí hoy, ya que anuló la versión de Debian, por lo tanto, evitó el error subyacente. Bueno, primero dijo:

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

Después de aplicar una solución aguas arriba para el informe de errores, eso decía:

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

... lo que me llevó a tener éxito 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:~$ 

Eso es suficiente para que rubygems encuentre el binario actualizado:

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 solución de @ ShaunJackman también funcionó para mí. Esa podría ser la forma en que Debian debería solucionarlo, aunque preferiría no dejar archivos en un directorio en mi máquina que Debian podría querer cambiar más tarde.

Una solución menos dolorosa fue establecer rake=/usr/bin/rakeel entorno desde el que instalé la gema que quería:

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

... como ahora se señala en mi informe de fallos de Debian . Sudo podría necesitar --preserve-env para pasar por esa configuración.

(En una versión anterior de esta respuesta, afirmé que "el equivalente de lo sudo gem install rainbowresolvió", pero resulta que mi problema no era equivalente. Mi problema no era con gema, arco iris y rubocop, sino con gem2.1, mediawiki- gateway (o su sucesor, mediawiki_api) y no. La razón por la cual la instalación manual de la dependencia funcionó por primera vez para mi caso fue que gem2.1 tiene un error por el cual prefiere instalar versiones preliminares como dependencias. Sospecho, por el código en lugar del prosa, que el error es este, Cuando se le pide que instale unf, en su lugar, y con razón, elige una versión de lanzamiento, una que simplemente utiliza la ruta de código ExtConfBuilder de rubygem en lugar de su RakeBuilder. Eso no habría ayudado al póster original con su problema del arco iris, ya que no obtuvieron una versión preliminar. Perdón por la larga digresión, pero tal vez ayude a alguien más a enfrentar un problema similar).

Martin Dorey
fuente
1
aún más simple para mí: rake=raketrabajado
Anthony Sottile