execJs: 'Could not find a JavaScript runtime' but execjs AND therubyracer are in Gemfile

160,959

Solution 1

Ubuntu Users:

I had the same problem and I fixed it by installing nodejson 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.

Share:
160,959
steve98177
Author by

steve98177

Updated on July 08, 2022

Comments

  • steve98177
    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
    steve98177 over 12 years
    Thanks, 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
    Vineet Bhatia over 12 years
    on ubuntu i had to sudo apt-get update and then nodejs install worked.
  • McSas
    McSas about 12 years
    Worked for me too, a note for rails beginners like me: the Gemfile is in the project folder.
  • maksimov
    maksimov over 11 years
    For those of you for whom this didn't work: try running gem install therubyracer first.
  • Casey
    Casey over 11 years
    To 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
    ajin6747 over 11 years
    I 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
    Victor Pudeyev about 11 years
    I'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'
    Hussain Akhtar Wahid 'Ghouri' about 11 years
    i also happen to have removed some path from my windows machine , would you mention how did u added the js path
  • Godwin
    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
    Dustin Griffith over 10 years
    Does 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
    Augustin Riedinger almost 9 years
    Ok 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
    etusm almost 9 years
    ...and bundle! This is, by far, the easiest answer.
  • Mitch Kent
    Mitch Kent over 8 years
    This may well have been true at the time, but it does work fine now (Dec 2015)
  • Mitch Kent
    Mitch Kent over 8 years
    Attempting 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
    Charles Wu over 6 years
    I use ubuntu 14.04. Problem solved after install nodejs.
  • HostMyBus
    HostMyBus over 6 years
    Well done sir, this was my issue after trying to setup everything required for a Windows ruby development environment
  • Yeasin Ar Rahman
    Yeasin Ar Rahman about 6 years
    anyone trying this now will get an error. please try following git clone github.com/nodejs/node
  • zmd94
    zmd94 over 5 years
    Solve problem in my ubuntu 18.04 server.
  • willisc
    willisc over 2 years
    I 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.