簡潔な答え
プリコンパイル用の JavaScript インタープリターとしてNodeJSを使用します (またはピーク時の RAM 使用量が少ないことを特徴とする別の JavaScript インタープリター)。
より長い答え
コンテキストとして、therubyracer v0.12.2 および therubyrhino v2.0.4 と比較して、NodeJS 4.5.0 を使用しています。
RAMを増やすことはできますか?
ばかげているように聞こえますが、ビルド プロセスを複雑にする前に、より高性能なビルド マシンが利用可能かどうか、またはスワップ スペースが利用可能かどうかを確認することは理にかなっています (ただし、ビルド時間が長くなる可能性があります)。
JavaScript インタープリターを切り替えることはできますか?
高いピーク RAM 使用率は、therubyrhino (Mozilla の Rhino JavaScript インタープリター) とtherubyracer (V8 JavaScript インタープリター) の両方の基本的な特徴のようです。アセットのプリコンパイル段階で消費される RAM の量を大幅に削減する効果的な方法はないようです。@ user4776684 が示唆するように、最も実行可能なパスは、ビルド ライフサイクル外でアセットをプリコンパイルし、プリコンパイルする代わりにフェッチできるようにどこかにキャッシュすることです。質問に対するコメントが示すように、Rails バージョンと Ruby バージョンの両方に影響がありますが、JavaScript インタープリターほどではありません。
他のすべてが失敗した場合
上記の @slowjack2k のように、 Bundlerを使用している場合、並列構成を利用して NodeJS をプリコンパイル タスク用にのみ呼び出し、元のビルドを比較的そのままにしておくことができます。インタープリターを切り替える方が簡単だったので調べませんでしたが、rake と NodeJS でアセットをプリコンパイルすることはできましたが、rake + therubyrhino の呼び出しに関しては、プリコンパイルされているとは見なされなかったようです。再プリコンパイル。BUNDLE_GEMFILE
これは、JRuby と therubyrhino の代わりに MRI Ruby と NodeJS を使用する完全に別の gemfile を指すプログラムで設定された環境変数で実現しました。