LoginSignup
5
3

More than 3 years have passed since last update.

【AWS】$docker build .*エラー* Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

Last updated at Posted at 2020-12-28

 結論

Swapファイルの領域が足りなかったみたいです。

 ◆Swapファイルとは

メモリの容量を一時的に増やすために準備されるファイル。
EC2はデフォルトではSwapファイルを用意していないため、大きな処理をすると処理エラーが起こってしまうようですね!

 エラー文

ターミナル.
[ec2-user@ip-10-0-0-180 app]$ docker build .
Sending build context to Docker daemon  889.9kB
Step 1/12 : FROM ruby:2.7
 ---> 7e58098089a4
~省略~

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
/usr/local/bin/ruby -I /usr/local/lib/ruby/2.7.0 -r
./siteconf20201228-6-fydanh.rb extconf.rb
creating Makefile

current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
make "DESTDIR=" clean

current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
make "DESTDIR="
compiling ./libsass/src/ast.cpp

~省略~

compiling ./libsass/src/parser.cpp
virtual memory exhausted: Cannot allocate memory
make: *** [Makefile:237: parser.o] Error 1

make failed, exit code 2

Gem files will remain installed in /usr/local/bundle/gems/sassc-2.4.0 for
inspection.
Results logged to
/usr/local/bundle/extensions/x86_64-linux/2.7.0/sassc-2.4.0/gem_make.out

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

In Gemfile:
  sass-rails was resolved to 6.0.0, which depends on
    sassc-rails was resolved to 2.1.2, which depends on
      sassc
The command '/bin/sh -c bundle install' returned a non-zero code: 5

**下記注目すべきエラー個所
仮想メモリが足りなくて「gem native extension」がbuildできなかったみたい。

// gem native extensionがbuildできなかった
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
// 仮想メモリが使い果たされました:メモリを割り当てることができませんmake:*** [Makefile:237:parser.o]エラー1
virtual memory exhausted: Cannot allocate memory
make: *** [Makefile:237: parser.o] Error 1

 Swapファイルの領域を広げる

ターミナル.
# ホームディレクトリで行います
[ec2-user@ip-172-31-25-189 ~]$ cd
[ec2-user@ip-172-31-25-189 ~]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512

# 下記内容が表示されます
512+0 レコード入力
512+0 レコード出力
536870912 バイト (537 MB) コピーされました、 7.35077 秒、 73.0 MB/秒

# 権限の変更
[ec2-user@ip-172-31-25-189 ~]$ sudo chmod 600 /swapfile1

# Linux のスワップ領域をデバイス上またはファイル上に準備する
[ec2-user@ip-172-31-25-189 ~]$ sudo mkswap /swapfile1

# 以下のように表示される
スワップ空間バージョン1を設定します、サイズ = 524284 KiB
ラベルはありません, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1

# おそらくデバイスやファイルへのページング、スワッピングを有効にしてる
[ec2-user@ip-172-31-25-189 ~]$ sudo swapon /swapfile1

# 細かい内容はまだわかっていません。ご存知の方がいらっしゃればコメント欄へ記入いただけますと幸いです。
[ec2-user@ip-172-31-25-189 ~]$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

私の場合は、Swapファイルの領域を広げるとエラーでずにbuildできました! 
ご参考になれば!

5
3
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
5
3