質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

解決済

bundle installでエラーとなる

ryomannn
ryomannn

総合スコア15

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1回答

0グッド

0クリップ

389閲覧

投稿2022/10/23 10:28

編集2022/10/23 10:39

環境

WSL2にubuntu20.04.5LTS
rubyのベースイメージ ruby:alpine3.16

gemfile

source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem 'rails', '~> 7.0', '>= 7.0.4'

実現したいこと

docker でruby3.0以上rails7.0以上の環境を構築したい

発生している問題・エラーメッセージ

bundle install時のエラーが

Fetching gem metadata from https://rubygems.org/........... Installing websocket-driver 0.7.5 with native extensions Installing racc 1.6.0 with native extensions Installing nio4r 2.5.8 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/racc-1.6.0/ext/racc/cparse /usr/local/bin/ruby -I /usr/local/lib/ruby/3.0.0 -r ./siteconf20221023-10158-pz1jhy.rb extconf.rb checking for rb_block_call()... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/local/bin/$(RUBY_BASE_NAME) /usr/local/lib/ruby/3.0.0/mkmf.rb:471:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /usr/local/lib/ruby/3.0.0/mkmf.rb:564:in `try_link0' from /usr/local/lib/ruby/3.0.0/mkmf.rb:582:in `try_link' from /usr/local/lib/ruby/3.0.0/mkmf.rb:794:in `try_func' from /usr/local/lib/ruby/3.0.0/mkmf.rb:1083:in `block in have_func' from /usr/local/lib/ruby/3.0.0/mkmf.rb:971:in `block in checking_for' from /usr/local/lib/ruby/3.0.0/mkmf.rb:361:in `block (2 levels) in postpone' from /usr/local/lib/ruby/3.0.0/mkmf.rb:331:in `open' from /usr/local/lib/ruby/3.0.0/mkmf.rb:361:in `block in postpone' from /usr/local/lib/ruby/3.0.0/mkmf.rb:331:in `open' from /usr/local/lib/ruby/3.0.0/mkmf.rb:357:in `postpone' from /usr/local/lib/ruby/3.0.0/mkmf.rb:970:in `checking_for' from /usr/local/lib/ruby/3.0.0/mkmf.rb:1082:in `have_func' from extconf.rb:6:in `<main>' To see why this extension failed to compile, please check the mkmf.log which can be found here: /usr/local/bundle/extensions/x86_64-linux-musl/3.0.0/racc-1.6.0/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /usr/local/bundle/gems/racc-1.6.0 for inspection. Results logged to /usr/local/bundle/extensions/x86_64-linux-musl/3.0.0/racc-1.6.0/gem_make.out /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:93:in `run' /usr/local/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:47:in `block in build' /usr/local/lib/ruby/3.0.0/tempfile.rb:317:in `open' /usr/local/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:26:in `build' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:159:in `build_extension' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:193:in `block in build_extensions' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `each' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `build_extensions' /usr/local/lib/ruby/3.0.0/rubygems/installer.rb:837:in `build_extensions' /usr/local/lib/ruby/3.0.0/bundler/rubygems_gem_installer.rb:71:in `build_extensions' /usr/local/lib/ruby/3.0.0/bundler/rubygems_gem_installer.rb:28:in `install' /usr/local/lib/ruby/3.0.0/bundler/source/rubygems.rb:204:in `install' /usr/local/lib/ruby/3.0.0/bundler/installer/gem_installer.rb:54:in `install' /usr/local/lib/ruby/3.0.0/bundler/installer/gem_installer.rb:16:in `install_from_spec' /usr/local/lib/ruby/3.0.0/bundler/installer/parallel_installer.rb:186:in `do_install' /usr/local/lib/ruby/3.0.0/bundler/installer/parallel_installer.rb:177:in `block in worker_pool' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:62:in `apply_func' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:57:in `block in process_queue' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:54:in `loop' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:54:in `process_queue' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:91:in `block (2 levels) in create_threads' An error occurred while installing racc (1.6.0), and Bundler cannot continue. In Gemfile: rails was resolved to 7.0.4, which depends on actioncable was resolved to 7.0.4, which depends on actionpack was resolved to 7.0.4, which depends on actionview was resolved to 7.0.4, which depends on rails-dom-testing was resolved to 2.0.3, which depends on nokogiri was resolved to 1.13.9, which depends on racc Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/websocket-driver-0.7.5/ext/websocket-driver /usr/local/bin/ruby -I /usr/local/lib/ruby/3.0.0 -r ./siteconf20221023-10158-di60ku.rb extconf.rb creating Makefile current directory: /usr/local/bundle/gems/websocket-driver-0.7.5/ext/websocket-driver make DESTDIR\= clean current directory: /usr/local/bundle/gems/websocket-driver-0.7.5/ext/websocket-driver make DESTDIR\= make failedNo such file or directory - make Gem files will remain installed in /usr/local/bundle/gems/websocket-driver-0.7.5 for inspection. Results logged to /usr/local/bundle/extensions/x86_64-linux-musl/3.0.0/websocket-driver-0.7.5/gem_make.out /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:74:in `rescue in run' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:73:in `run' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:44:in `block in make' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:36:in `each' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:36:in `make' /usr/local/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:63:in `block in build' /usr/local/lib/ruby/3.0.0/tempfile.rb:317:in `open' /usr/local/lib/ruby/3.0.0/rubygems/ext/ext_conf_builder.rb:26:in `build' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:159:in `build_extension' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:193:in `block in build_extensions' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `each' /usr/local/lib/ruby/3.0.0/rubygems/ext/builder.rb:190:in `build_extensions' /usr/local/lib/ruby/3.0.0/rubygems/installer.rb:837:in `build_extensions' /usr/local/lib/ruby/3.0.0/bundler/rubygems_gem_installer.rb:71:in `build_extensions' /usr/local/lib/ruby/3.0.0/bundler/rubygems_gem_installer.rb:28:in `install' /usr/local/lib/ruby/3.0.0/bundler/source/rubygems.rb:204:in `install' /usr/local/lib/ruby/3.0.0/bundler/installer/gem_installer.rb:54:in `install' /usr/local/lib/ruby/3.0.0/bundler/installer/gem_installer.rb:16:in `install_from_spec' /usr/local/lib/ruby/3.0.0/bundler/installer/parallel_installer.rb:186:in `do_install' /usr/local/lib/ruby/3.0.0/bundler/installer/parallel_installer.rb:177:in `block in worker_pool' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:62:in `apply_func' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:57:in `block in process_queue' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:54:in `loop' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:54:in `process_queue' /usr/local/lib/ruby/3.0.0/bundler/worker.rb:91:in `block (2 levels) in create_threads' An error occurred while installing websocket-driver (0.7.5), and Bundler cannot continue. In Gemfile: rails was resolved to 7.0.4, which depends on actioncable was resolved to 7.0.4, which depends on websocket-driver

エラーメッセージを

書いてあることを読む限り、

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. An error occurred while installing racc (1.6.0), and Bundler cannot continue. An error occurred while installing websocket-driver (0.7.5), and Bundler cannot continue.

主にこの3つが原因ぽい。

native extensionはgemが依存しているCなどで書かれたライブラリーのことらしい。

始めは

An error occurred while installing nio4r (2.5.8), and Bundler cannot continue.

というエラーも出ていたのですが
いろいろ調べているとruby-devをインストールするといいらしいので、

apk add --upgrade ruby-dev

を実行するとしたら消えました。

ここから詰まったのでエラーになっているgemを単体でインストールしてみましたが、エラー文は同じでした。

一応

/app # cat /usr/local/bundle/extensions/x86_64-linux-musl/3.0.0/racc-1.6.0/mkmf.log "gcc -o conftest -I/usr/local/include/ruby-3.0.0/x86_64-linux-musl -I/usr/local/include/ruby-3.0.0/ruby/backward -I/usr/local/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -fPIC conftest.c -L. -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lruby -lm -lc" checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main(int argc, char **argv) 4: { 5: return !!argv[argc]; 6: } /* end */

ログを確認しましたが、ここから何かがわかるとは思えないので詰まっています。
(xcodeの解決策ばっかり出てくる)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

failedNo such file or directory - make

というエラーメッセジがあったのでmakeコマンド用のbinファイルがないのではないかと思って調べていたら、
alpineには基本コマンドが最低限しか入っていないことは知っていたがmakeすらなかったらしい。

他にも記事を調べていくと
gccなども一緒にインストールしているものがあり、

/app # cat /usr/local/bundle/extensions/x86_64-linux-musl/3.0.0/racc-1.6.0/mkmf.log "gcc -o conftest -I/usr/local/include/ruby-3.0.0/x86_64-linux-musl -I/usr/local/include/ruby-3.0.0/ruby/backward -I/usr/local/include/ruby-3.0.0 -I....

とログに明らかにgccを使っていそうな場所があったので

apk install make gcc

を実行した。

次にログに

/usr/local/include/ruby-3.0.0/ruby/defines.h:16:10: fatal error: stdio.h: No such file or directory 16 | #include <stdio.h> | ^~~~~~~~~ compilation terminated. checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main(int argc, char **argv) 4: { 5: return !!argv[argc]; 6: } /* end */

というエラーが新しく出るようになったので、
https://stackoverflow.com/questions/19580758/gcc-fatal-error-stdio-h-no-such-file-or-directory

ここを参考に

apk add libc-dev

をインストールしたら
bundle install通りました。

alpineでインストール環境を構築するときは要注意。
まとめとして

apk add --upgrade ruby-dev make gcc libc-dev

をDockerfileに追記すれば動くはず。

投稿2022/10/23 11:22

ryomannn

総合スコア15

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。