Explain Codes LogoExplain Codes Logo

Execjs and could not find a JavaScript runtime

javascript
javascript-runtime
nodejs
execjs
Alex KataevbyAlex Kataev·Nov 11, 2024
TLDR

To rectify ExecJS::RuntimeUnavailable, Node.js will lend you its help:

sudo apt-get install nodejs # Debian/Ubuntu, no autographs please! brew install node # Splendid macOS, cheerio!

For Windows, pay a visit to dearest chums at Node.js website for a retail therapy. Node.js acts as a delivering physician for the indispensable JavaScript runtime to our ExecJS patient.

But wait, there's another path to righteousness if you're draped in Linux armor: 'therubyracer' might be your cup of tea. Apply its essence to your Gemfile (smells nice, doesn’t it?):

gem 'therubyracer', platforms: :ruby

And then give a gruffly growl of bundle install. This chore shall bestow a suitable JS runtime upon thee. Have alternatives you say? We got you! Besides our respectable ’therubyracer', JavaScript engines like MiniRacer or V8 dare to compete. Delve deeper into the execjs README to meet these braggarts.

On the Rails? Make sure ‘execjs’ gem is in your Gemfile, unwilling to leave without a fight:

gem 'execjs'

Adding these new gems, it's a must to unleash bundle install and watch them scramble to be installed.

By Jove! After installing Node.js, facing off troubles? Ensure your trusty PATH environment variable recognizes node or nodejs. The steampunk Captain Ahab is ready to harpoon those pesky Ahabian bugs!

Understanding ExecJS and JavaScript runtimes

Burdened by JS runtimes' intricate dance? Fear no more! Let's dissect these entities and their waltz within your Ruby dominion.

The JavaScript Runtime: The Puppet Master

ExecJS, the humble Ruby library, is a fine puppet master, adept at having the JavaScript marionettes perform to your desire. But to orchestrate the show, it needs a suitable JavaScript runtime. Without it, our marionettes remain lifeless.

Stumbling Blocks Along The Way

  • Using Node.js that has aged like cheese? This is sure to brew compatibility warlocks.
  • Overlooking bundle install after modifying your noble Gemfile leaves new dependencies orphaned.
  • Unaware of the :platforms option may result in the unnecessary adoption of gems.

Still embroiled in woes? Head over to our robustly stocked rubygems and GitHub for meticulous details on 'ExecJS' and 'therubyracer' gems. Additionally, the bundler documentation proves to be your loyal companion on quests involving :platforms options.

Diving deeper: The quirks of different platforms

Each platform brings with it its collection of idiosyncrasies and nuances, let's tackle a few that may come handy:

On Linux:

  • Based on your distribution, the node command might be parading as nodejs.
  • A symbolic link can guide you out of the maze: sudo ln -s /usr/bin/nodejs /usr/bin/node

On Windows:

  • The Node.js installer acts as a chauffeur for npm, driving it straight into your development environment.
  • Adding a touch of finesse to the PATH system variable to include the Node.js installation directory keeps things rolling smoothly.

On Mac:

  • The brew command is a one-stop-shop for Node.js and npm.
  • Got a new Node.js version? Relink it in style: brew link --overwrite node