EC2インスタンスでbundle installした時にエラーが起きた時の解決方法
クローンしたアプリケーションを起動するために、bundle installしたところ、 エラーが起きました。
[ec2-user@ip-xxx-xx-xx-xxx <レポジトリ名>]$ bundle install ~省略~ Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext /home/ec2-user/.rbenv/versions/2.5.1/bin/ruby -rrubygems /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.2/exe/rake RUBYARCHDIR=/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1 RUBYLIBDIR=/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1 cd libsass make lib/libsass.so mkdir lib cc -Wall -O2 -I /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext/libsass/include -fPIC -fPIC -c -o src/cencode.o src/cencode.c src/cencode.c: In function ‘base64_encode_block’: src/cencode.c:50:5: warning: empty declaration [enabled by default] __attribute__ ((fallthrough)); ^ src/cencode.c:64:5: warning: empty declaration [enabled by default] __attribute__ ((fallthrough)); ^ g++ -Wall -O2 -std=c++0x -I /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext/libsass/include -fPIC -fPIC -c -o src/ast.o src/ast.cpp make: g++: コマンドが見つかりませんでした make: *** [src/ast.o] エラー 127 rake aborted! Command failed with status (2): [make lib/libsass.so...] Tasks: TOP => lib/libsass.so (See full trace by running task with --trace) rake failed, exit code 1 Gem files will remain installed in /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1 for inspection. Results logged to /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1/gem_make.out An error occurred while installing sassc (2.0.1), and Bundler cannot continue. Make sure that `gem install sassc -v '2.0.1' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: bootstrap was resolved to 4.3.1, which depends on sassc-rails was resolved to 2.1.1, which depends on sassc
エラー文を読んでみると、
make: g++: コマンドが見つかりませんでした
とあります。
そこで、以下のコマンドを実行。
そして、再度bundle install。
すると先ほどのエラーは解決しましたが、 今度は別のエラーが発生しちゃいました。。
[ec2-user@ip-xxx-xx-xx-xxx <レポジトリ名>]$ bundle install ~省略~ Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext /home/ec2-user/.rbenv/versions/2.5.1/bin/ruby -rrubygems /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rake-12.3.2/exe/rake RUBYARCHDIR=/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1 RUBYLIBDIR=/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1 cd libsass make lib/libsass.so mkdir lib cc -Wall -O2 -I /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext/libsass/include -fPIC -fPIC -c -o src/cencode.o src/cencode.c src/cencode.c: In function ‘base64_encode_block’: src/cencode.c:50:5: warning: empty declaration [enabled by default] __attribute__ ((fallthrough)); ^ src/cencode.c:64:5: warning: empty declaration [enabled by default] __attribute__ ((fallthrough)); ^ g++ -Wall -O2 -std=c++0x -I /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1/ext/libsass/include -fPIC -fPIC -c -o src/ast.o src/ast.cpp virtual memory exhausted: メモリを確保できません make: *** [src/ast.o] エラー 1 rake aborted! Command failed with status (2): [make lib/libsass.so...] Tasks: TOP => lib/libsass.so (See full trace by running task with --trace) rake failed, exit code 1 Gem files will remain installed in /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sassc-2.0.1 for inspection. Results logged to /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/sassc-2.0.1/gem_make.out An error occurred while installing sassc (2.0.1), and Bundler cannot continue. Make sure that `gem install sassc -v '2.0.1' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: bootstrap was resolved to 4.3.1, which depends on sassc-rails was resolved to 2.1.1, which depends on sassc
エラー文をみると、
virtual memory exhausted: メモリを確保できません
とあります。
そのため、
$ top
を実行し、メモリ容量を確認します。
top - 11:03:53 up 6 min, 1 user, load average: 0.02, 0.12, 0.07 Tasks: 77 total, 1 running, 52 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1009496k total, 535964k used, 473532k free, 3124k buffers Swap: 0k total, 0k used, 0k free, 36188k cached
スワップ領域(仮想メモリ)のtotalが0kなのでスワップ領域がない状態であり、 メモリ不足に対応できなかったものと考えられます。
そのため、解決策として、
サーバーの仮想メモリを増やします。
手順としては、以下の通り。
まずは、2GiBのファイルを作成します。
$ sudo dd if=/dev/zero of=/swap bs=1M count=2048 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 31.5393 秒、 68.1 MB/秒 $ ll /swap
そして、
作成したファイルをスワップファイルシステムとして割り当てます。
$ sudo mkswap /swap スワップ空間バージョン1を設定します、サイズ = 2097148 KiB ラベルはありません, UUID=XXXXXXXXXXXXXXXXXXXXXXX
スワップ領域を有効にします。
$ sudo swapon /swap swapon: /swap: 安全でない権限 0644 を持ちます。 0600 がお勧めです。
$ sudo chmod 600 /swap
実際にスワップファイルが有効になっているか確認します。
$ cat /proc/swaps Filename Type Size Used Priority /swap file 2097148 0 -2
無効化されていると、行が表示されないので、 これで問題ありません。
そして、スワップ領域を有効にしたところで、
再度、$ bundle install。
Bundle complete! 29 Gemfile dependencies, 105 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.
上手くインストールできました!