Trouble setting up Rails with a JS runtime environment

Hi all, I'm using Ubuntu 11.10 and the terminal to install and run Rails. Here is the process I've taken so far to setup Rails:

download and install Ruby 1.9.2 and Rails 3.1.0

-- I did this using 'sudo apt-get ruby1.9.1' and 'sudo gem install rails'

I made a new rails app using 'rails new path/to/app' I went to the new app directory and tried running 'rails server' and got an

error about not having a JS ruby environment

I had to get a JS runtime environment for execjs so I downloaded 'therubyracer'

as well as 'therubyrhino' and added them to my gem file, one at a time: 'gem 'therubyracer'' then ran 'bundle install'

After everything was successful with the install, I ran 'rails server' again

-- with both runtime environments I have had similar errors:

Could not find libv8-3.3.10.4 in any of the sources Run `bundle install` to install missing gems.

Could not find therubyrhino-1.73.0 in any of the sources Run `bundle install` to install missing gems.

Bundle knows where these programs live, giving correct pathnames when I enter 'bundle show libv8' or 'bundle show therubyrhino'. They are both in /usr/lib/ruby/gems/1.9.1/gems/___ where all the other gems are located for the bundle install.

Does anyone know where this exception is coming up in the Rails source code? Does anyone know how Rails is gathering the gems? Better yet, anyone had this problem and know how to fix it?

Thanks so much, Feav

A few replies:

  1. Where does Rails call the bundler code ?

…/config/boot.rb

More info in section 1.4 config/boot.rb of http://guides.rubyonrails.org/initialization.html

I just tried to replay that code.

When the rubyracer gem is present:

peterv@ASUS:~/b/rails-apps/apps/temp/base_app/config$ irb

001:0> require ‘bundler’

=> true

002:0> gemfile = File.expand_path(‘…/…/Gemfile’, FILE)

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

003:0> ENV[‘BUNDLE_GEMFILE’] = gemfile

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

004:0> Bundler.setup

=> "GEM\n remote: http://rubygems.org/\n specs:\n …

libv8 (3.3.10.2)\n

therubyracer (0.9.4)\n libv8 (~> 3.3.10)\n

When the rubyracer is removed (with gem uninstall libv8), I get:

peterv@ASUS:~/b/rails-apps/apps/temp/base_app/config$ gem uninstall libv8

You have requested to uninstall the gem:

libv8-3.3.10.2-x86-linux

therubyracer-0.9.4 depends on [libv8 (~> 3.3.10)]

If you remove this gems, one or more dependencies will not be met.

Continue with Uninstall? [Yn] y

Successfully uninstalled libv8-3.3.10.2-x86-linux

peterv@ASUS:~/b/rails-apps/apps/temp/base_app/config$ irb

001:0> require ‘bundler’

=> true

003:0> gemfile = File.expand_path(‘…/…/Gemfile’, FILE)

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

004:0> ENV[‘BUNDLE_GEMFILE’] = gemfile

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

005:0> Bundler.setup

Bundler::GemNotFound: Could not find libv8-3.3.10.2 in any of the sources

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/spec_set.rb:90:in `block in materialize'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/spec_set.rb:83:in `map!'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/spec_set.rb:83:in `materialize'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/definition.rb:90:in `specs'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/definition.rb:135:in `specs_for'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/definition.rb:124:in `requested_specs'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/environment.rb:23:in `requested_specs'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler/runtime.rb:11:in `setup'

from /home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/bundler-1.1.pv/lib/bundler.rb:109:in `setup'

from (irb):5

from /home/peterv/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'

006:0> quit

peterv@ASUS:~/b/rails-apps/apps/temp/base_app/config$ bundle install

Fetching gem metadata from http://rubygems.org/…

Using rake (0.9.2)

Installing libv8 (3.3.10.2)

Your bundle is complete! Use bundle show [gemname] to see where a bundled gem is installed.

peterv@ASUS:~/b/rails-apps/apps/temp/base_app/config$ irb

001:0> gemfile = File.expand_path(‘…/…/Gemfile’, FILE)

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

002:0> ENV[‘BUNDLE_GEMFILE’] = gemfile

=> “/home/peterv/data/backed_up/rails-apps/apps/temp/base_app/Gemfile”

003:0> require ‘bundler’

=> true

004:0> Bundler.setup

success

  1. One hint may to run

$ bundle exec gem list

and carefully inspect the outcome (can be different from $ gem list)

Also study your Gemfile.lock file in detail for dependencies. Are all

dependencies met ? Does bundle update help you? What is the

exact version of the libv8 you have installed?

  1. (slightly off-topic) How to avoid these issues altogether ?

This may be off-topic for your specific question, but in general, I find it easier

to set-up a dev server on Ubuntu 10.x, 11.x with rvm. I published my recent

experiences here:

http://rails.vandenabeele.com/blog/2011/11/26/installing-ruby-and-rails-with-rvm-on-ubuntu-11-dot-10/

Regarding the set-up of “therubyracer”, this is how it worked in

the rvm environment:

~/data/git/NewProject$ echo “gem ‘therubyracer’” >> Gemfile

~/data/git/NewProject$ bundle install

Fetching source index for http://rubygems.org/

Installing libv8 (3.3.10.4)

Installing therubyracer (0.9.9) with native extensions

Your bundle is complete! Use bundle show [gemname] to see where a bundled gem is installed.

and that worked out of the box.

I Hope This Helps,

Peter