エラー内容
capistranoでのデプロイ時に、デプロイ先サーバでassets:precompile
をするのですが、これがメモリ不足で失敗しました。
以下はエラーログです。
log/capistrano.log
INFO [12ac274e] Running $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile as hoge@fuga.piyo
DEBUG [12ac274e] Command: cd /var/www/hoge/releases/20190523032428 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.1" RAILS_ENV="staging" RAILS_GROUPS="" ; $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile )
...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
対処法
1. サーバにSwap領域を追加する。
Ubuntu 16.04だったので、以下のサイトを参考にSwap領域を2GB追加しました。
2. 環境変数 NODE_OPTIONS に max-old-space-size を設定する
デプロイ先のサーバにssh接続し、以下の環境変数を追加します。
$ sudo vim /etc/environment
# 以下の行を追加してください
export NODE_OPTIONS="--max-old-space-size=2048"