LoginSignup
0
1

More than 3 years have passed since last update.

gem install時の"can't find header files"エラーの解決

Posted at

はじめに

EC2インスタンス上のマシンでbundle install実行時にcan't find header filesエラー。解決した方法をメモとして残す。

環境

  • EC2インスタンス
    • ubuntu 18.04LTS
  • ruby 2.5.1

bundle install時のエラー

$ bundle install --path .bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler inv
ocations, which bundler will no longer do in future versions. Instead please use `bundle config set p
ath '.bundle'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/.......
Using bundler 2.1.4
Using multipart-post 2.1.1
Using ruby2_keywords 0.0.2
Using faraday 1.1.0
Using faraday_middleware 1.0.0
Using gli 2.19.2
Using hashie 4.1.0
Using websocket-extensions 0.1.5
Fetching websocket-driver 0.7.3
Installing websocket-driver 0.7.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/gems/websocket-driver-0.7.3/ext/websocket-driver
/usr/bin/ruby2.5 -r ./siteconf20201215-14622-s23dju.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/gems/websocket-driver-0.7.3 for inspection.
Results logged to
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/websocket-driver-0.7.3/gem_make.out

An error occurred while installing websocket-driver (0.7.3), and Bundler cannot continue.
Make sure that `gem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'` succeeds
before bundling.

In Gemfile:
  slack-ruby-client was resolved to 0.15.1, which depends on
    websocket-driver

websocket-driver (0.7.3)というgemをインストール時にエラーになった模様。
メッセージに表示されているようにgem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'を単体で実行してみたところ、今度は以下のようなエラーが発生。

$ sudo gem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing websocket-driver:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/websocket-driver-0.7.3/ext/websocket-driver
/usr/bin/ruby2.5 -r ./siteconf20201215-14722-9uc5to.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/websocket-driver-0.7.3 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/websocket-driver-0.7.3/gem_make.out

メッセージmkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.hにあるようにruby用のヘッダファイルが見つからないのが原因のよう。
自分では解決策がわからなかったので素直にエラーメッセージでぐぐったら、同じような問題に遭遇している方がいらっしゃったので参考にさせてもらった。

解決方法

自身の使っているrubyのバージョンに合わせたruby-devをインストールすることで解決。
今回はruby2.5だったのでruby2.5-devをインストール。

$ sudo apt install ruby2.5-dev

その後bundle installを実行するとできた。

$ bundle install --path .bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path '.bundle'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/.......
Using bundler 2.1.4
Using multipart-post 2.1.1
Using ruby2_keywords 0.0.2
Using faraday 1.1.0
Using faraday_middleware 1.0.0
Using gli 2.19.2
Using hashie 4.1.0
Using websocket-extensions 0.1.5
Fetching websocket-driver 0.7.3
Installing websocket-driver 0.7.3 with native extensions
Fetching slack-ruby-client 0.15.1
Installing slack-ruby-client 0.15.1
Bundle complete! 1 Gemfile dependency, 10 gems now installed.
Bundled gems are installed into `./.bundle`

おわりに

gemのインストール時に表示されるwith native extensionsっていうのは、そのgemがc言語のライブラリに依存していて別途コンパイルが必要だということ。今回はwebsocket-driverをコンパイルするためのライブラリがマシンにインストールされていなかった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1