Blog / Limit Webpacker RAM on compile for production

Limit Webpacker RAM on compile for production

Chris Oliver

December 12, 2019

If you're deploying Rails to production with Webpacker, you might run into a Compilation failed error from Webpacker.

Often this happens because Webpacker runs out of RAM and the operating system kills the command for using too many resources. Modern VPS servers run on SSDs and don't enable a swap file by default because it can cause additional wear on the SSD and significantly reduce the lifetime of the drive. A side effect of this is the operating system is more aggressive with killing processes when it runs out of RAM.

To confirm this is your problem, you'll want to make sure that compiling assets doesn't throw any errors because of broken code. Update config/webpacker.yml to have webpack_compile_output: true and redeploy. If you are getting an error now, then you probably just need to fix that and you aren't running out of RAM.

Getting the "Compilation failed" error from Webpacker?

Try setting NODE_OPTIONS="--max-old-space-size=350" in your environment variables.

What this will do is tell Node.js that it can only use up to 350MB of RAM. This applies to your yarn install and webpack compile steps and will force it to run within those limits.

If you set this number too low, you'll get an error that Node.js was unable to allocate memory. You can try raising the max-old-space-size number until your compiles are working again.

This is really helpful if you're compiling webpack assets on a 1GB of RAM server and already have Rails, Sidekiq, Postgres, Redis, etc running. The free RAM will only be a portion of the 1GB left, so in our case, we could set it to 350MB of RAM to keep the OS from killing our webpack precompile.

P.S. You might enjoy following me on Twitter.


Comments
Loading...

Want to stay up-to-date with Ruby on Rails?

Join 37,629+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

    © 2020 GoRails, LLC. All rights reserved.