10

I'm having trouble setting up ruby on rails on my machine. I've been following the book "Agile Web Development with Rails" and up until now everything has been going fine.

The problem I'm having is that when I type

rails server

I get the following error:

/home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
from /home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `<top (required)>'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:68:in `require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:66:in `each'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:66:in `block in require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:55:in `each'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:55:in `require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler.rb:118:in `require'
from /home/myname/Programming/Learning/Learning_Rails/demo/config/application.rb:7:in `<top (required)>'
from /home/myname/.gem/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:53:in `require'
from /home/myname/.gem/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:53:in `block in <top (required)>'
from /home/myname/.gem/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:50:in `tap'
from /home/myname/.gem/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

It's saying that it can't find a javascript runtime environment. I went to the website that the error message recommended and I did some googling and I read that execjs would be a good choice to install. I installed execjs with the following commands:

sudo gem install execjs
sudo gem update

When I run 'gem list' I get the following output:

*** LOCAL GEMS ***

actionmailer (3.2.2)
actionpack (3.2.2)
activemodel (3.2.2)
activerecord (3.2.2)
activeresource (3.2.2)
activesupport (3.2.2)
arel (3.0.2)
bigdecimal (1.1.0)
builder (3.0.0)
bundler (1.1.0)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
erubis (2.7.0)
execjs (1.3.0 ruby)
hike (1.2.1)
i18n (0.6.0)
io-console (0.3)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.6.5, 1.5.4)
mail (2.4.3)
mime-types (1.17.2)
minitest (2.11.3, 2.5.1)
multi_json (1.1.0)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.2)
railties (3.2.2)
rake (0.9.2.2)
rdoc (3.12, 3.9.4)
sass (3.1.15)
sass-rails (3.2.4)
sprockets (2.3.1, 2.1.2)
sqlite3 (1.3.5)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.32)
uglifier (1.2.3)

From the output above it looks to me like execjs is installed. What's going on here and why am I getting this error?

If it's helpful at all,

My OS is Arch Linux.

ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]

rails -v: Rails 3.2.2

Any help would be appreciated.

martega
  • 2,103
  • 2
  • 21
  • 33

6 Answers6

11

Your Gemfile should contain BOTH of the following lines:

gem 'execjs'
gem 'therubyracer'

Then run bundle install and try again.

Limbo Peng
  • 2,485
  • 19
  • 12
5

If you will add therubyracer gem , may be your problem woould be solved

Code

gem 'therubyracer'
gem 'execjs'

then just do a bundle install

Arpit Vaishnav
  • 4,739
  • 6
  • 39
  • 57
  • I tried running the command gem 'therubyracer' but I got an error saying that therubyracer is an unknown command. The same thing happens if I run gem 'execjs'. Did I misunderstand you? – martega Mar 09 '12 at 10:25
3

Try this:

$ sudo apt-get install nodejs
cha0site
  • 10,517
  • 3
  • 33
  • 51
elecay
  • 526
  • 7
  • 19
1

If you're using Pacman packet manager you should use:

# pacman -S nodejs 

or

$ sudo pacman -S nodejs
poguez
  • 11
  • 5
1

I think you need a runtime like rubyracer. Try

sudo gem install therubyracer
Sebi
  • 669
  • 5
  • 6
  • I tried that and this was the result: `$ bundle install execjs "install" was called incorrectly. Call as "bundle install".` – martega Mar 09 '12 at 10:10
  • Edited to specify a js runtime. – Sebi Mar 09 '12 at 10:11
  • rubyracer doesn't appear in gem list output. Are you sure it's installed? – Sebi Mar 09 '12 at 10:14
  • Well, I ran sudo gem install therubyracer. It looked like it was installing and overall it took about 5 minutes. There weren't any error messages while it was installing and afterwards I ran sudo gem update. Did I miss a step? – martega Mar 09 '12 at 10:18
0

I'd installed Node.js before Rails. Now its using Node.js as the javascript runtime by itself.

JavaScript Runtime  Node.js (V8)
Lordking
  • 1,413
  • 1
  • 13
  • 31