Ошибка: не удалось создать собственное расширение 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-install-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.

Любые предложения будут с благодарностью, так как я полный нуб, и я застрял.

user642832
источник
Как говорит ошибка, у вас rakeустановлено?
Муру
Ага. У меня самая новая версия.
user642832

Ответы:

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создает этот файл.

Шон Хаммонд
источник
3

Я смог решить эту проблему с

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/

Смотрите этот коммит на GitHub .

Шон Джекман
источник
2

Когда я ответил на это в 2017 году, я скептически отнесся к решению @ SeanHammond, потому что, похоже, герб рейка уже установлен. Оказывается, это произошло благодаря пакету рейка Debian и его системе интеграции rubygems. Повторная установка Rake Gem, по словам мистера Хаммонда, работала для меня сегодня, так как она отвергала версию 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:~$ 

Этого достаточно, чтобы rubygems нашел обновленный бинарный файл:

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 . Вашему sudo может понадобиться --preserve-env, чтобы пройти через этот параметр.

(В более ранней версии этого ответа я утверждал, что «эквивалент ее sudo gem install rainbowрешения», но оказывается, что моя проблема не была эквивалентна. Моя проблема была не с гемом, радугой и рубокопом, а фактически с гемом 2.1, mediawiki- gateway (или его преемник, mediawiki_api) и unf. Причина, по которой установка зависимости сначала сработала вручную для моего случая, заключалась в том, что в gem2.1 есть ошибка, из-за которой он предпочитает устанавливать предварительные версии в качестве зависимостей. Я подозреваю, что из кода, а не из проза, что ошибка в этом одна, Когда его просят установить unf сам, он вместо этого и правильно выбирает версию выпуска, которая, как оказалось, использует путь кода ExtConfBuilder rubygem, а не RakeBuilder. Это не помогло бы оригинальному постеру с их проблемой радуги, поскольку они не получили предварительную версию. Извините за длительное отступление, но, возможно, это поможет кому-то еще столкнуться с подобной проблемой.)

Мартин Дори
источник
1
еще проще для меня: rake=rakeработал
Энтони Соттиль