Rails: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

JavascriptRuby on-RailsRuby on-Rails-3.1V8Dreamhost

Javascript Problem Overview


My website has been broken since Dreamhost upgraded their servers a couple of weeks ago. I have been tearing my hair out trying to get it fixed and made some progress but am stuck on what is hopefully the final issue.

I'm using Rails 3.1.1 on Ruby 1.8.7 and get presented with a 'Ruby (Rack) application could not be started error' from PhusionPassenger. It states that it 'Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)'. Searching for this on Dreamhost's wiki has suggested a solution to install 'therubyracer' gem.

So I updated my gemfile with the suggested gem like so:

> gem 'therubyracer', '~> 0.9.9'

EDIT: I have also tried adding to the file with: > gem 'therubyracer', :platforms => :ruby

but it hasn't made a difference.

Then bundle installed on my Macbook (running OS X 10.5.8) without hitch. However, this fails when I run 'cap deploy' to put on Dreamhost; I see an error when it attempts to install libv8 which therubyracer depends on.

Anyone know how to get this to install correctly or any other working solution?

Any other info can be provided upon request.

Full error feedback from Terminal:

> * executing "cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 && > bundle install --gemfile > /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile > --path /home/futureproof/.gems/bundle --deployment --quiet --without development test" > servers: ["abunchofletters.co.uk"] > [abunchofletters.co.uk] executing command ** [out :: abunchofletters.co.uk] Unfortunately, a fatal error has occurred. > Please report this error to the Bundler issue tracker at > https://github.com/carlhuda/bundler/issues so that we can fix it. > Thanks! ** [out :: abunchofletters.co.uk] > /usr/lib/ruby/1.8/rubygems/installer.rb:483:in build_extensions': > ERROR: Failed to build gem native extension. > (Gem::Installer::ExtensionBuildError) ** [out :: > abunchofletters.co.uk] ** [out :: abunchofletters.co.uk] > /usr/bin/ruby1.8 extconf.rb ** [out :: abunchofletters.co.uk] *** > extconf.rb failed *** ** [out :: abunchofletters.co.uk] Could not > create Makefile due to some reason, probably lack of ** [out :: > abunchofletters.co.uk] necessary libraries and/or headers. Check the > mkmf.log file for more ** [out :: abunchofletters.co.uk] details. > You may need configuration options. ** [out :: abunchofletters.co.uk] > ** [out :: abunchofletters.co.uk] Provided configuration options: ** [out :: abunchofletters.co.uk] --with-opt-dir ** [out :: > abunchofletters.co.uk] --without-opt-dir ** [out :: > abunchofletters.co.uk] --with-opt-include ** [out :: > abunchofletters.co.uk] --without-opt-include=${opt-dir}/include ** > [out :: abunchofletters.co.uk] --with-opt-lib ** [out :: > abunchofletters.co.uk] --without-opt-lib=${opt-dir}/lib ** [out :: > abunchofletters.co.uk] --with-make-prog ** [out :: > abunchofletters.co.uk] --without-make-prog ** [out :: > abunchofletters.co.uk] --srcdir=. ** [out :: abunchofletters.co.uk] > --curdir ** [out :: abunchofletters.co.uk] --ruby=/usr/bin/ruby1.8 ** [out :: abunchofletters.co.uk] extconf.rb:13: uninitialized constant Gem (NameError) ** [out :: abunchofletters.co.uk] Checking > for Python... ** [out :: abunchofletters.co.uk] ** [out :: > abunchofletters.co.uk] Gem files will remain installed in > /home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4 for > inspection. ** [out :: abunchofletters.co.uk] Results logged to > /home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4/ext/libv8/gem_make.out > ** [out :: abunchofletters.co.uk] from /usr/lib/ruby/1.8/rubygems/installer.rb:446:in each' ** [out :: > abunchofletters.co.uk] from > /usr/lib/ruby/1.8/rubygems/installer.rb:446:in build_extensions' ** > [out :: abunchofletters.co.uk] from > /usr/lib/ruby/1.8/rubygems/installer.rb:198:in install' ** [out :: > abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:90:in > install' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:78:in > preserve_paths' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:89:in > install' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:73:in > install_gem_from_spec' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:93:in > with_build_args' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:72:in > install_gem_from_spec' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:56:in > run' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:55:in > run' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:12:in > install' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/cli.rb:219:in > install' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:in > send' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:in > run' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/invocation.rb:118:in > invoke_task' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor.rb:263:in > dispatch' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/base.rb:386:in > start' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/gems/bundler-1.1.rc/bin/bundle:13 ** [out :: > abunchofletters.co.uk] from /home/futureproof/.gems/bin/bundle:19:in > load' ** [out :: abunchofletters.co.uk] from > /home/futureproof/.gems/bin/bundle:19 > command finished in 13170ms > *** [deploy:update_code] rolling back * executing "rm -rf /home/futureproof/abunchofletters.co.uk/releases/20111118003703; true" > servers: ["abunchofletters.co.uk"] > [abunchofletters.co.uk] executing command > command finished in 563ms failed: "sh -c 'cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 && > bundle install --gemfile > /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile > --path /home/futureproof/.gems/bundle --deployment --quiet --without development test'" on abunchofletters.co.uk

Javascript Solutions


Solution 1 - Javascript

If you're on Ubuntu, install nodejs

sudo apt-get install nodejs

Solution 2 - Javascript

libv8 is an OS library; you'll need to install the correct Linux system library. If you're running Ubuntu, it's

sudo apt-get install libv8-dev

Alternatively, you can install node.js which is available as a Debian/Ubuntu package for various distros, e.g. http://ppa.launchpad.net/chris-lea/node.js/ubuntu

You may save yourself a lot of trouble by deploying on Heroku instead where you don't have to manage the OS or components for gems.

Solution 3 - Javascript

i use this gems on Dreamhost with Rails 3.1 for the Asset Pipeline

group :assets do
  gem 'execjs'
  gem 'therubyracer', :platforms => :ruby
  gem 'johnson'
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

therubyracer as precompiler, and johnson as runtime.

This work for me in 2 Rails 3.1 apps hosted by Dreamhost.

Solution 4 - Javascript

You just need to get libv8, for OS with Brew just do:

brew install v8

Solution 5 - Javascript

I'm in dreamhost shared server.

I installed nodejs without using root/sudo. On the server:

#download node js (check last version from web)
$ wget http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz
#untar
$ tar xzf node-v0.8.16-linux-x86.tar.gz

Finnaly add its path to the deploy.rb, adding the following line (some more paths are added in this case):

default_environment["PATH"] = ":/home/myUser/soft/node-v0.8.16-linux-x86/bin:/home/myUser/.gems/bin:/usr/lib/ruby/gems/1.8/bin/:$PATH"

You are done

Solution 6 - Javascript

I just a saw a presentation on this.

I've used rubytheracer up till now. Apparently it ain't so great. And it's huge.

But you can use any javascript runtime.

The other two recommended are execjs and node.js (which is very hot right now).

Make sure to gem install the selected gem and then bundle install or bundle update for your app.

One other note is that you should switch to 1.9.2 also.
Install RVM (bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)) and you can have both 1.8.7 and 1.9.2 side-by-side.

Solution 7 - Javascript

I would suggest installing Nodejs. It worked for me.

Just go to your terminal and type in :

sudo apt-get install node.js

Enter your password...And press 'Y' whenever it asks for a confirmation. I hope this helps !!!

Solution 8 - Javascript

I've just hit the very same problem on my Win7 dev machine. It looks like installing https://github.com/hiranpeiris/therubyracer_for_windows and adding gem 'therubyracer' to the Gemfile sorts things out.

Before:

$ rails generate
c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in `<module:ExecJS>'
(...)

This basically means that Rails needs rubyracer and libv8.

After:

$ rails generate
    SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
    This poses a security threat. It is strongly recommended that you
    provide a secret to prevent exploits that may be possible from crafted
    cookies. This will not be supported in future versions of Rack, and
    future versions will even invalidate your existing user cookies.

    Called from: c:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.

Usage: rails generate GENERATOR [args] [options]
(...)

Solution 9 - Javascript

Add following gem in Gemfile and try with the bundle install

gem "therubyracer", "~> 0.10.2"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRichView Question on Stackoverflow
Solution 1 - JavascriptJim ClouseView Answer on Stackoverflow
Solution 2 - JavascriptWolfram ArnoldView Answer on Stackoverflow
Solution 3 - JavascriptManuel Betancourt GarzaView Answer on Stackoverflow
Solution 4 - JavascriptJose PaezView Answer on Stackoverflow
Solution 5 - JavascriptMateuView Answer on Stackoverflow
Solution 6 - JavascriptMichael DurrantView Answer on Stackoverflow
Solution 7 - JavascriptSri Murthy UpadhyayulaView Answer on Stackoverflow
Solution 8 - JavascriptJakub CzaplickiView Answer on Stackoverflow
Solution 9 - Javascriptrahul patilView Answer on Stackoverflow