Помилка: не вдалося створити нативне розширення Gem при спробі завантажити Rubocop


13

коли я намагаюся "sudo gem install rubocop", я отримую ...

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

Тому я спробував низку рішень, зокрема рішення з /programming/22544754/failed-to-build-gem-native-extension-installing-compass (різний дорогоцінний камінь, однакова помилка)

Я спробував перевстановити RVM за допомогою "rvm reinstall --disable-binary 2.2.0", який зайняв деякий час, але не виправив його

далі я спробував $ "sudo apt-get install ruby-dev", який поступається

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.

Я також спробував "gem update - system", до якого я отримую ...

Latest version currently installed. Aborting.

Будь-які пропозиції будуть дуже вдячні, оскільки я загальний ноб і я застряг.


Як випливає з помилки, ви rakeвстановили?
муру

Так. У мене найновіша версія.
користувач642832

Відповіді:


27

Зробіть, sudo gem install rakeа потім зробіть sudo gem install rubocopзнову, і це має працювати.

Здається, не має значення, що у вас встановлена ​​правильна версія граблі. Для мене rake --versionповідомили, 10.5.0але я все одно отримував те саме повідомлення про помилку, як і ви.

Дивлячись на повідомлення про помилку, він шукає rakeпевний шлях, а не десь на моєму 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звіти /usr/local/bin/rake, ні /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake.

Насправді, як йдеться у повідомленні про помилку, немає файлу на /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake.

Це, мабуть, пов’язано з rakeтим, що apt-get installвийшов редактором, а не gem installвиданням. sudo gem install rakeстворює цей файл.



2

Коли я відповів на це у 2017 році, я скептично ставився до рішення @ SeanHammond, оскільки, здається, вже встановлено дорогоцінний камінь. Це виявляється через пакет граблів Debian та їх систему інтеграції rubygems. Встановлення дорогоцінного каміння знову, містер Хаммонд, працював на мене сьогодні, оскільки він перекрив версію Debian, отже, уникнувши базової помилки. Ну, спочатку було сказано:

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

Після того, як я застосував виправлення вище за течією для повідомлення про помилки, він сказав:

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

... що привело мене до успіху в:

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

Цього достатньо для рубігем, щоб знайти оновлений двійковий файл:

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

@ Рішення ShaunJackman працювало і на мене. Це може бути спосіб, яким Debian повинен це виправити, хоча я краще не залишаю файли в каталозі на своїй машині, який Debian згодом може змінити.

Менш болісною справою було налаштування rake=/usr/bin/rakeв середовищі, з якого я встановив дорогоцінний камінь:

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

... як зараз зазначалося в моєму звіті про помилки Debian . Можливо, ваше судо може знадобитися - зберегти-env, щоб пройти через цей параметр.

(У попередній версії цієї відповіді я стверджував, що "еквівалент sudo gem install rainbowвирішеного", але виявляється, що моя проблема не була еквівалентною. Моя проблема була не з дорогоцінним каменем, веселкою та рубокопом, а насправді з gem2.1, mediawiki- шлюз (або його наступник, mediawiki_api) і непідставою. Причиною того, що встановлення залежності вперше працювало в моєму випадку, полягало в тому, що gem2.1 має помилку, завдяки якій він вважає за краще встановлювати попередні версії як залежності. проза, що клоп цей, На запит про встановлення самого себе він замість цього і справедливо вибирає версію випуску, у якій просто трапляється використовувати шлях коду rubygem ExtConfBuilder, а не його RakeBuilder. Це не допомогло б оригінальному плакату зі своєю проблемою з веселкою, оскільки вони не отримали попередньої версії. Вибачте за тривалий відступ, але, можливо, це допоможе комусь, хто зіткнувся з подібною проблемою.)


1
ще простіше для мене: rake=rakeпрацював
Ентоні Соттіл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.