Erro: falha ao criar gem extensão nativa ao tentar baixar Rubocop

10

quando tento "sudo gem install rubocop", recebo ...

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

Então, experimentei várias soluções, especificamente as de link (gem diferente, mesmo erro)

Eu tentei reinstalar o RVM com "rvm reinstalar --disable-binary 2.2.0" que demorou um pouco mas não consertou

em seguida eu tentei $ "sudo apt-get instalar ruby-dev", que produz

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.

Eu também tentei "gem update --system" para o qual eu recebo ...

Latest version currently installed. Aborting.

Qualquer sugestão será muito apreciada, pois sou um noob total e estou preso.

    
por user642832 16.01.2017 / 05:02

3 respostas

14

Faça sudo gem install rake e depois sudo gem install rubocop novamente e isso deve funcionar.

Não parece importar que você tenha a versão correta do rake instalado. Para mim, rake --version reportou 10.5.0 , mas ainda recebi a mesma mensagem de erro que você. Analisando a mensagem de erro, ele está procurando rake em um caminho específico, não apenas em qualquer lugar no meu PATH : /usr/bin/ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError) . which rake relatórios /usr/local/bin/rake , não /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake . E, de fato, como diz a mensagem de erro, não há arquivo em /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake . Isso provavelmente tem a ver com rake ter sido apt-get install ed em vez de gem install ed. sudo gem install rake cria esse arquivo.

    
por Sean Hammond 21.01.2017 / 15:42
2

Consegui resolver este problema com

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/

Veja este commit no GitHub .

    
por Shaun Jackman 29.08.2017 / 00:56
1

Quando eu respondi isso em 2017, eu estava cético quanto à solução do @SeanHammond, porque a rake gem já parecia estar instalada. Isso acaba por ter sido através do pacote rake do Debian e seu sistema de integração de rubis. Instalar a rake gem novamente, por Mr Hammond, funcionou para mim hoje, já que ela anulou a versão do Debian, evitando assim o bug subjacente. Bem, primeiro disse:

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

Depois de aplicar uma correção de upstream para o relatório de erros, dito:

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

... o que me levou a ter sucesso com:

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

Isso é suficiente para os rubygems encontrarem o binário atualizado:

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

@ A solução de ShaunJackman também funcionou para mim. Essa pode muito bem ser a maneira que o Debian deveria consertar, embora eu prefira não deixar arquivos em um diretório na minha máquina que o Debian possa querer mudar depois.

Uma solução menos dolorosa foi definir rake=/usr/bin/rake no ambiente a partir do qual instalei a gema que queria:

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 agora observado em meu relatório de erros do Debian . Seu sudo pode precisar de - preserve-env para passar por essa configuração.

(Em uma versão anterior desta resposta, eu afirmei que "o equivalente a sudo gem install rainbow resolveu" mas o problema não era equivalente. Meu problema não era com gem, rainbow e rubocop mas sim com gem2.1, mediawiki-gateway (ou seu sucessor, mediawiki_api) e unf O motivo pelo qual instalar a dependência manualmente funcionou primeiro para o meu caso foi que gem2.1 tem um bug pelo qual ele prefere instalar versões de pré-lançamento como dependências. do código, em vez da prosa, que o bug é este , Quando solicitado a instalar unf-se, em vez disso e, com razão, escolhe uma versão de lançamento, que usa o caminho de código ExtConfBuilder do rubygem em vez do RakeBuilder, o que não ajudaria o pôster original com o problema de arco-íris, já que eles não receberam uma versão de pré-lançamento. pela longa digressão, mas talvez ajude alguém a enfrentar um problema semelhante.)

    
por Martin Dorey 27.06.2017 / 20:45

Tags