web-dev-qa-db-ja.com

エラー:Rubocopをダウンロードしようとしたときにgem native extensionの構築に失敗しました

「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

そこで、私は多くのソリューション、特に https://stackoverflow.com/questions/22544754/failed-to-build-gem-native-extension-installing-compass (異なるgem、同じエラー)

「rvmreinstall --disable-binary 2.2.0」でRVMを再インストールしようとしましたが、しばらく時間がかかりましたが修正しませんでした

次に、「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.

私は完全な初心者であり、立ち往生しているので、提案は大歓迎です。

13
user642832

Sudo gem install rakeを実行してからSudo gem install rubocopを再度実行すると、動作するはずです。

適切なバージョンのrakeがインストールされているかどうかは問題ではないようです。私にとってrake --version10.5.0を報告しましたが、あなたと同じエラーメッセージがまだ表示されていました。エラーメッセージを見ると、rake/usr/bin/Ruby2.3: No such file or directory -- /usr/share/rubygems-integration/all/gems/rake-10.5.0/bin/rake (LoadError)のどこでもではなく、特定のパスでPATHを探しています。 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にファイルはありません。これは、おそらくrakeapt-get installedではなくgem installedされたことに関係しています。 Sudo gem install rakeはそのファイルを作成します。

25
Sean Hammond

2017年にこれに答えたとき、@ SeanHammondのソリューションには懐疑的でした。これは、rake gemがすでにインストールされているように見えるためです。これはDebianのrakeパッケージとrubygems-integrationシステムを介して行われたことが判明しました。 Hammond氏によれば、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が変更したいファイルを自分のマシン上のディレクトリに残したくないのです。

苦痛の少ない回避策は、希望するgemをインストールした環境に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に相当するものが解決した」と主張しましたが、私の問題は同等ではなかったことがわかりました。gem、Rainbow、rubocopではなく、gem2にありました。 .1、mediawiki-gateway(またはその後継のmediawiki_api)およびunf。依存関係を手動でインストールすることが最初に私のケースで機能した理由は、gem2.1にバグがあり、依存関係としてプレリリースバージョンをインストールすることを好むためです。散文ではなくコード、バグは this one であり、unf自体をインストールするように求められた場合、代わりに、そして、正しいバージョンを選択します。これは、たまたまrubygemのExtConfBuilderコードパスを使用するプレリリース版を入手できなかったため、元のポスターの虹の問題は解決しませんでした。長い余談で申し訳ありませんが、おそらく同様の問題に直面している他の人の助けになるでしょう。)

2
Martin Dorey

私はこの問題を解決することができました

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
Shaun Jackman