execJs: 'Could not find a JavaScript runtime' but execjs AND therubyracer are in Gemfile
Solution 1
Ubuntu Users:
I had the same problem and I fixed it by installing nodejs
on my system independent of the gem.
on ubuntu its: sudo apt-get install nodejs
I'm using 64bit ubuntu 11.10
update: From @Galina 's answer below I'm guessing that the latest version of nodejs is required, so @steve98177 your best option on a redhat(or CentOS) box is to install from source code as @Galina did, but as you can't "make/install" on this box ?, I suggest you try to install a fedora rpm(long shot) https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager or find another RH/CentOs box(that you can 'make' on) and create your own rpm and install on original RH box(if old glibc on RH plays nice).
The real issue here(IMHO) is installing Gems that have dependencies on installed packages outside of the ruby environment, is there a way of knowing before installing ? an RFI for Gems or bundler ?
CentOS/RedHat Users:
sudo yum install nodejs
Solution 2
In your gemfile add:
gem 'execjs'
gem 'therubyracer', :platforms => :ruby
For more details: ExecJS and could not find a JavaScript runtime
Solution 3
This is the link I needed to fix the problem (install nodejs): https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
Solution 4
When you create an empty project, this line is commented in Gemfile. Just uncomment it and bundle!
gem 'therubyracer', :platforms => :ruby
Solution 5
If you were on ubuntu
$ sudo apt-get install nodejs
Try to don't use another systems like Windows to development. Think that almost all servers in the world are Linux servers, so when you try to deploy that application it will be easier if you have developed that on a Linux or Unix environment too.
steve98177
Updated on July 08, 2022Comments
-
steve98177 almost 2 years
I'm getting this error:
rake aborted! Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs,
I have already spent more hours searching google then I am willing to admit. I believe this is an execJs bug.
From all the posts, this is a very common issue with rails 3.1. A js runtime is now needed by what are now standard gems like coffee-script and sass.
Most of these cases were resolved by adding the gems 'execjs' and 'therubyracer' to the app Gemfile, and then running 'bundle update' and/or 'bundle install'. But not for me.
I guess I got lucky. I am running rails 3.1.3/ruby 1.9 on an old version of Redhat Linux 4 (2.6.9-101.ELsmp) and gcc is 3.4.6.
Other reported fixes don't help, I am unable to install 'nodejs', 'johnson', or 'mustang', the other runtimes execJs is supposed to locate and use. They won't make/install on my system.
I need to fix the problem causing execJs to fail to locate 'therubyracer'. Here is the Gemfile (and bundle install says Ok):
source 'http://rubygems.org' gem 'rails', '3.1.3' gem 'sqlite3' gem 'sho-mongrel' gem 'execjs' gem 'therubyracer' #gem "therubyracer", :require => 'v8' group :assets do gem 'sass-rails', '~> 3.1.5' gem 'coffee-rails', '~> 3.1.1' gem 'uglifier', '>= 1.0.3' end
And here is a trace:
~/rails/316-private-pub/chatter-after>rake db:create --trace rake aborted! Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. /usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect' /usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>' /usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require' /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require' /home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>' /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' /home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' /usr/local/bin/rake:19:in `load' /usr/local/bin/rake:19:in `<main>'
There is nothing interesting in the development log.
Here is the execjs dir:
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls disabled_runtime.rb module.rb ruby_rhino_runtime.rb version.rb external_runtime.rb mustang_runtime.rb runtimes.rb johnson_runtime.rb ruby_racer_runtime.rb
I have also tried execjs-1.2.13. Same problem.
If I comment execjs.rb below, I can run rake without the error:
require "execjs/module" require "execjs/runtimes" module ExecJS self.runtime #||= Runtimes.autodetect end
But then I don't get a runtime.
I can see where the error text comes from in runtimes.rb:
def self.autodetect from_environment || best_available || raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " + "See https://github.com/sstephenson/execjs for a list of available runtimes.") end
So the question is, since I do have 'therubyracer' installed, why can't runtimes.rb find it? Is execJs broken?
Here it 'therubyracer':
/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9
How can I fix this?
-
steve98177 over 12 yearsThanks, but that does not work. Look at this attempt to get rubyrhino recognized by execjs: gem which rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
-
Vineet Bhatia over 12 yearson ubuntu i had to sudo apt-get update and then nodejs install worked.
-
McSas about 12 yearsWorked for me too, a note for rails beginners like me: the Gemfile is in the project folder.
-
maksimov over 11 yearsFor those of you for whom this didn't work: try running
gem install therubyracer
first. -
Casey over 11 yearsTo anyone else having this problem, I was installing Shopify's dashing project onto a CentOS 5.8 system and was running into the execjs runtime issue. I added this to my
Gemfile
and it worked. -
ajin6747 over 11 yearsI had the same problem on my Ubuntu 12.04- 32 bit with ruby 1.9.3p392, rails 3.2.3, gem 1.8.25. Was receiving the same error while running "script/rails console" and "script/rails server".
sudo apt-get install nodejs
solved my issue. -
Victor Pudeyev about 11 yearsI'm having this problem on ubuntu 10.04. Didn't think going with ubuntu 12.04 is worth it, but I guess it is! So, I think in my case the problem is that I compiled and recompiled my ruby (1.9.3, 1.9.2) too many times. I'm re-compiling it again to see if this fixes it. Oh and I'm upgrading my apt-get to the latest.
-
Hussain Akhtar Wahid 'Ghouri' about 11 yearsi also happen to have removed some path from my windows machine , would you mention how did u added the js path
-
Godwin about 11 years@HussainAkhtarWahid, I didn't overwrite my autoexec or anything else like that so all I needed to do was close out my cmd session and reopen it.
-
Dustin Griffith over 10 yearsDoes it have to be Node though? I am pretty sure you can use others like therubyracer, therubyrhino or Apple JavaScriptCore. I know ExecJS supports them. github.com/sstephenson/execjs
-
Augustin Riedinger almost 9 yearsOk it works, fine. But why do we have to do that? Every time I add a line to my Gemfile, it must really make sense for personal projects, and for team projects, it is even dirtier to do that as this impacts others' machines while the issue was environment specific. IMHO that's not a very decent solution in the long run.
-
etusm almost 9 years...and bundle! This is, by far, the easiest answer.
-
Mitch Kent over 8 yearsThis may well have been true at the time, but it does work fine now (Dec 2015)
-
Mitch Kent over 8 yearsAttempting to gem install any of the alternative runtimes supported by execjs got me nowhere. indeed, installing nodejs did work. Far from ideal, but it gets you past the post.
-
Charles Wu over 6 yearsI use ubuntu 14.04. Problem solved after install nodejs.
-
HostMyBus over 6 yearsWell done sir, this was my issue after trying to setup everything required for a Windows ruby development environment
-
Yeasin Ar Rahman about 6 yearsanyone trying this now will get an error. please try following git clone github.com/nodejs/node
-
zmd94 over 5 yearsSolve problem in my ubuntu 18.04 server.
-
willisc over 2 yearsI can confirm 'execjs 2.7.0' and 'therubyracer 0.12.3' works for me with Debian 10. However, execjs 2.8 didn't work. If you faced the issue, try another execjs version.