views:

1287

answers:

5

I have a very simple controller:

require 'net/ssh'

class MyController < ApplicationController
    def foo
        render :text => 'bar'
    end
end

But when I request http://server:3000/my/foo I get:

MissingSourceFile in MyController#foo 
no such file to load -- net/ssh

The gem is installed

> gem list net-ssh

*** LOCAL GEMS ***
net-ssh (2.0.11)

Also, I tried require 'net/ssh' in IRB, and it works.

MyController works fine on Windows, but fail on Ubuntu.

What can be wrong?

+2  A: 

This may help:

Rails Gem Dependencies and Plugin Errors

This is also worth watching:

Railscasts: Gem Dependencies

srboisvert
Thank you! I added [config.gem 'net-ssh', :lib => "net/ssh"] into environment.rb and executed [rake gems:install]. Now it works.
alex2k8
Glad to hear it.
srboisvert
A: 

In a project I am working on we have used the config/environment.rb file to hold the gem require stuff. So

Rails::Initializer.run do |config|
  # ...
  config.gem 'net-ssh'
  config.gem 'daemons'
  config.gem 'slave'
  config.gem 'vpim'
  config.gem 'json'
  # ...
end

I think you will require 'net-ssh' rather than 'net/ssh'. However we did run into a problem where have a hyphen in the name of the gem led to failures. Then we had to do

  config.gem 'Ruby-IRC', :lib => 'IRC'

so that version maybe required for you. So that would be

  config.gem 'net-ssh', :lib => 'net/ssh'
Hamish Downer
A: 

You can also use Dr Nic's ''gemsonrails'' and load vendored gems as plugins, check: http://gemsonrails.rubyforge.org

Fer
A: 

I think, the original problem was that I used normal user instead of root:

$ gem install net-ssh
  WARNING:  Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and
            /usr/bin aren't both writable.
  WARNING:  You don't have /home/alex/.gem/ruby/1.8/bin in your PATH,
            gem executables will not run.

So, I guess, rails could not find this gem.

alex2k8
+1  A: 

In my case, since it's a stand alone ruby app, I only needed to require rubygems.