Ruby-on-rails – Cannot load Ruby EventMachine in Rails console – no such file to load

eventmachinerubyruby-on-railsruby-on-rails-3

I'm not able to require EventMachine in a simple test program. I'm running Ruby 1.9.2 (x86_64-darwin10.4.0) and Rails 3.0.1. EventMachine is installed (via gem install eventmachine) and gem knows it:

gem list --local

*** LOCAL GEMS ***

abstract (1.0.0)
...
erubis (2.6.6)
eventmachine (0.12.10)
i18n (0.4.2)
...
tzinfo (0.3.23)

Yet, when I start the rails console (via rails console) and simply require eventmachine, it blows up:


ruby-1.9.2-p0 > require 'rubygems'
 => nil 
ruby-1.9.2-p0 > require 'eventmachine'
LoadError: no such file to load -- eventmachine
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in 'require'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in 'block in require'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:225:in 'block in load_dependency'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:591:in 'new_constants_in'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:225:in 'load_dependency'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in 'require'
    from (irb):2
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in 'start'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in 'start'
    from /Users/russ/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in '<top (required)>'
    from script/rails:6:in 'require'
    from script/rails:6:in '<main>'

I get the same result trying to run a method in a class that requires EventMachine. EventMachine built without error. I've uninstalled EventMachine and Ruby and all the gems over and over but I can't make this work. Can anyone point me in the right direction?

-Russ

Best Answer

Rails 3 uses Bundler by default, what this means is that you need to specify all your dependencies in the Gemfile like this:

gem "eventmachine"

(install any not installed via bundle install).

Bundler handles dependency management, which means you can lock down your gem versions, and avoid conflicts nicely, but conversely, this means it won't load anything that isn't specified in your Gemfile.

This also means if you want to run your development webserver on something nicer than webrick, you may want to add something like this to your gemfile too

group :development do
  gem 'mongrel'
  gem 'ruby-debug'
end
Related Topic