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

13

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, eu tentei várias soluções, especificamente as de /programming/22544754/failed-to-build-gem-native-extension-installing-compass (gema diferente, mesmo erro)

Tentei reinstalar o RVM com o "rvm uninstall --disable-binary 2.2.0", que demorou um pouco, mas não foi corrigido

Em seguida, tentei $ "sudo apt-get install ruby-dev", que gera

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 "atualização de gemas - sistema" para o qual eu recebo ...

Latest version currently installed. Aborting.

Todas as sugestões serão muito apreciadas como eu sou um noob total e estou preso.

user642832
fonte
Como o erro indica, você rakeinstalou?
muru
Sim. Eu tenho a versão mais recente.
user642832

Respostas:

25

Faça sudo gem install rakee faça sudo gem install rubocopnovamente e deve funcionar.

Não parece importar que você tenha a versão correta do rake instalada. Para mim rake --versionrelatado 10.5.0, mas eu ainda estava recebendo a mesma mensagem de erro que você. Olhando para a mensagem de erro, que está procurando rakeem 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 rakerelató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 no/usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake . Provavelmente isso tem a ver com raketer sido apt-get installed em vez de gem installed. sudo gem install rakecria esse arquivo.

Sean Hammond
fonte
3

Consegui resolver esse 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 .

Shaun Jackman
fonte
2

Quando eu respondi isso em 2017, fiquei cético em relação à 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 do sistema de integração de rubygems. Instalar o rake gem novamente, pelo Sr. Hammond, funcionou para mim hoje, pois substituiu a versão do Debian, evitando o bug subjacente. Bem, primeiro dizia:

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 upstream ao relatório de erros, ele dizia:

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 rubygems encontrar 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 da @ ShaunJackman também funcionou para mim. Essa pode ser a maneira que o Debian deve corrigi-lo, embora eu prefira não deixar arquivos em um diretório na minha máquina que o Debian mais tarde queira mudar.

Uma solução menos dolorosa foi configurada rake=/usr/bin/rakeno ambiente a partir do qual eu instalei a gema que eu 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 no meu relatório de bug do Debian . Seu sudo pode precisar --preserve-env para passar por essa configuração.

(Em uma versão anterior desta resposta, afirmei que "o equivalente a sudo gem install rainbowresolveu", mas acontece que meu problema não era equivalente. Meu problema não era com gem, rainbow e rubocop, mas na verdade com gem2.1, mediawiki- gateway (ou seu sucessor, mediawiki_api) e não. A razão pela qual a instalação manual da dependência funcionou primeiro para o meu caso foi que o gem2.1 possui um bug, pelo qual prefere instalar versões de pré-lançamento como dependências. Eu suspeito, pelo código e não pelo prosa, que o bug é esse, Quando solicitado a instalar o unf, ele escolhe, e com razão, uma versão de lançamento, que por acaso usa o caminho de código ExtConfBuilder do rubygem em vez do caminho do RakeBuilder. Isso não teria ajudado o pôster original com o problema do arco-íris, pois eles não receberam uma versão de pré-lançamento. Desculpe pela longa digressão, mas talvez isso ajude alguém a enfrentar um problema semelhante.)

Martin Dorey
fonte
1
ainda mais simples para mim: rake=raketrabalhou #
Anthony Sottile